您的位置:首页 > 其它

杭电1002 A+B Problem(II)

2015-07-20 21:25 429 查看
/*

大数加法的关键在于用字符型的数组解决问题,两个字符数组用于存储将要进行计算的数据,另一个整形数组或字符数组存储结果.分析:使两个字符串中的字符数字都减去'0',逐个相加大于10的可以使本位减去10,下一位自增1,

例如定义:char a[],b[];int c[];则c[]=a[]-'0'+b[]-'0';接着就是处理进位问题*/

#include<stdio.h>#include<string.h>#define M 10002char a[M],b[M];int c[M];int main(){    int i,t,j,L1,L2,k,cas,x,flag;    scanf("%d",&t);    getchar();    cas=1;    while(t)    {    scanf("%s %s",a,b);    L1=strlen(a);//记录数组a的长度     L2=strlen(b);//记录数组b的长度     k=0;flag=0;    memset(c,0,sizeof(c));//数组c用来记录a[i]+b[i]的值,即两数相加的和     printf("Case %d:\n",cas++);    printf("%s + %s = ",a,b);           for(i=0;;i++)       {                          if(i<L1&&i<L2)                      {                          c[k]=(a[L1-i-1]-'0')+(b[L2-i-1]-'0')+flag;                          flag=0;                   if(c[k]>9)//如果该位大于10,则进1             {               c[k]=c[k]-10;             flag=1;            }            k++;                      }                      else break;       }               if(L2<L1)//如果数组b的长度小于数组a的长度              {             while(i<L1)                 {                     c[k++]+=a[L1-1-i]-'0'+flag;                     i++;                     flag=0;                 }             }                else if(L2>L1)//如果数组a的长度小于数组b的长度              {                       while(i<L2)                 {                     c[k++]+=b[L2-1-i]-'0'+flag;                     i++;                     flag=0;                 }             }            else if(L1==L2)//如果a的长度与b相等             {                if(c[k]==1)                k=k+1;            }                       k=k-1;                   while(k>=0)//倒着输出                  {                    printf("%d",c[k]);                              k=k-1;                }                if(t>1)printf("\n\n");                else printf("\n");                t=t-1;             }    return 0;   }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: