| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 719 人关注过本帖
标题:开贴自己练习,欢迎参与。
只看楼主 加入收藏
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
我对大数运算还很陌生啊。一步一步来,有错的地方还请大家指教。

先做这个: 输入一个个位数,求他的n次方。比如 2的 31次方是2147483648。

上代码:
程序代码:
#include  <stdio.h>

#include  <math.h>

int  main(void)

{
    int n, m, s = 1, i = 0;
   
    int k = 1, j; 

    int  a[100] = { 0 }, b[100] = { 0 };
       
    printf("\nplease input n(1 - 9):");

    scanf("%d", &n);

    printf("\nplease input m:");

    scanf("%d", &m);

    printf("\n");

    a[0] = 1; 

    while (i < m)

    {
        for (j = 0; j <= k ; j ++)

        {
            s = a[j] * n;

            if ((s + b[j]) < 10)

            a[j] = s + b[j];

           else
           
           { 
              a[j] = (s + b[j])  % 10;
             
              b[j + 1] = (s + b[j])  / 10;   
   
           }
        
          
        }

        if (a[--j])  k++;

        for (j = 0; j <= k; j++)

            b[j] = 0;

        i++;
    }

    for (j = k - 1; j >= 0; j--)

        printf("%d", a[j]);

    printf("\n\n");

    return  0;
}

图片附件: 游客没有浏览图片的权限,请 登录注册
         
图片附件: 游客没有浏览图片的权限,请 登录注册


发现写的这个程序能做两位数之内的,到三位数就不行了
 
图片附件: 游客没有浏览图片的权限,请 登录注册
               
图片附件: 游客没有浏览图片的权限,请 登录注册


[ 本帖最后由 有容就大 于 2012-1-17 20:01 编辑 ]

梅尚程荀
马谭杨奚







                                                       
2012-01-17 20:00
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
下把争取把输入任意正整数求其任意正整数次方,写出来。哇咔咔,很难想象大数的大数次方是多少啊。

梅尚程荀
马谭杨奚







                                                       
2012-01-17 21:55
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
程序代码:
#include  <stdio.h>

#include  <math.h>

#include  <string.h>

#define  N 10001

int  main(void)

{
    char  a1[N];

    int   a2[N], b[N], c[N] = { 0 }, d[N] = { 0 };

    int   n, m, i, j = 0, k;

    int   len, len1, mul;

    printf("Please  input a string a1:");

    gets(a1);

    len = strlen(a1);

    for (i = 0; i < len; i++)

    {
        if (a1[i] < 48 || a1[i] > 57)

        {

            printf("Illegal input !\n");

            printf("Enter again:");

            gets(a1);

            break;
        }
    }

    printf("\n");

    for (i = len - 1; i >= 0; i--)

    {
         b[j] = a2[j] = a1[i] - 48;

         printf("%d", b[j]);   j++;
    }

    printf("\n\nPlease input m:");

    scanf("%d", &m);

    len1 = len;

    while (m - 1)

    {

       for (i = 0; i < len; i++)

    {
            k = i;

        for (j = 0; j < len1; j++)

        {
            mul = b[i] * a2[j] ;     

               if (mul + c[k] + d[k] > 9)

               {
                  c[k + 1] = (mul + c[k] + d[k]) / 10;
               
                  d[k] = (mul + c[k]  + d[k]) % 10;
               }

               else 

                d[k] = mul + c[k] + d[k];

               k++;

        }

        d[k] = c[k];
       
        for (j = 0; j <= k; j++)

            c[j] = 0;
       
    }



        len1 = k + 1;
   
        for (j = 0; j <= len1; j++)

        {
            a2[j] = d[j];

            d[j] = 0;
        }

    m--;

    }

    printf("\n");

    for (i = len1 ; i >= 0; i--)

    {
           
        if (a2[i])
           
        {
            j = i;  break;
        }

    }

        for (i = j; i >= 0; i--)

                printf("%d", a2[i]);    

    printf("\n\n");

    printf("Please input n & m:");

    scanf("%d%d", &n, &m);

    printf("\n\n%f\n\n", pow(n, m));

    return    0;
}


图片附件: 游客没有浏览图片的权限,请 登录注册


哈哈

图片附件: 游客没有浏览图片的权限,请 登录注册


[ 本帖最后由 有容就大 于 2012-1-19 07:28 编辑 ]

梅尚程荀
马谭杨奚







                                                       
2012-01-19 07:23
快速回复:开贴自己练习,欢迎参与。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.013829 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved