ACM简单处理大数加法方法

来源:互联网 发布:启明星软件 功能 编辑:程序博客网 时间:2024/06/05 08:25

在ACM刷题中,处理大数问题,如大数加法,减法,乘法,除法,高精度计算,一般都用字符数组处理。

1.大数加法

处理方法:模拟两个数相加过程:从低位开始相加,有进位则做进位处理

两数相加过程:

 

但是处理过程并不完一样:具体方法:将两个大数分别存入两字符数组中,因为要处理进位问题,所以把两数颠倒之后放入两整型数组中去(最高位有进位时,如果不颠倒,处理起来会比较麻烦),然后从低位开始相加到高位,先不做进位问题,加完之后再进位,然后在把结果存入字符数组中

代码: 

    #include<stdio.h>

    #include<string.h>

    #define mem(a,b)   memset(a,b,sizeof(a))

    #define max a>=b?a:b

    int  main()

{

       char sa[400],sb[400],s[400];                             //用来存放两个大数

        int  sum[400],lena,lenb,maxl,i,d;

                   scanf("%s %s",sa,sb);

          mem(sum,0);                                         //将数组sum清0

          lena=strlen(sa);

          lenb=strlen(sb);

           maxl=max(lena,lenb);

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

                          sum[lena-1-i]=sa[i]-'0';

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

                             sum[lenb-1-i]+=sb[i]-'0';       //把两大数从个位开始对应相加,先不做进位处理

                        for(i=0,d=0;i<maxl;i++)               //进位初始化为0

                           {

                                   sum[i]+=d;

                                   d=sum[i]/10;

                                    sum[i]%=10;

                          }                                              //从个位开始处理进位                                                           

                         if(d>0)                                       //如果最高位有进位

                           sum[maxl++]+=d;

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

                                   s[maxl-1-i]=sum[i]+'0';    // 结果存入字符数组s中

                                  s[maxl]='\0';

                           printf("%s\n",s);

                               return 0;

  }

 

                             

              

      

 

0 0
原创粉丝点击