大数加法

来源:互联网 发布:数据融合技术类型 编辑:程序博客网 时间:2024/06/06 05:48

对于位数超过long long型的大数数据计算,我们可以借助字符串来完成计。

例如,求n个大数的和。

定义需要用到的变量:char num[n][1001];                //n个字符串。

                                    int a[n][1000];                     //用来存放由字符串转换来的数据。

                                    int cnt[n];                            //用来存放计数a数组中的位数。

                                    int sum[1001];                     //用来存放结果。

对于数据的输入及转换代码:

int a[n][1000]={0},cnt[n]={0},sum[1001]={0};        for(int i=0;i<n;i++)        {            scanf("%s",num[i]);            int len=strlen(num[i]);            cnt[i]=0;            for(int j=len-1;j>=0;j--)                a[i][cnt[i]++]=num[i][j]-'0';//将最低位与最高位倒置,便于进位计算        }
加法计算过程:

        for(int i=0;i<n;i++)        {            for(int j=0;j<cnt[i];j++)            {                sum[j]+=a[i][j];                if(sum[j]>=10)//逢十进一                {                    sum[j]-=10;                    sum[j+1]++;                }            }        }
结果输出过程:

        int k;        for(k=1000;k>0;k--)        {            if(sum[k])            break;        }//数的首位不为零,根据这个定理从后向前找大数的最高位        for(int j=k;j>=0;j--)            printf("%d",sum[j]);        printf("\n");