首页 > 代码库 > 大数加法

大数加法

http://blog.csdn.net/u010258605/article/details/44308149

参考自以上博客。

/**
    Description: 

    Arguments:

    Returns:
(1) 数据的输入

(2) 数据的存储

(3)数据的运算:进位和借位

(4)结果的输出:小数点的位置和处于多余的0 


*/
#include <cstdio>
#include <cstring>
int main()
{
    char a[500],b[500];
    scanf("%s %s",a,b);
    int lena=strlen(a),lenb=strlen(b);
    int aa[500],bb[500],cc[500];
    memset(aa,0,sizeof(aa));
    memset(bb,0,sizeof(bb));
    memset(cc,0,sizeof(cc));
    
    //将字符串转换成数组 
    for(int i=0;i<=lena-1;i++)
    {
        aa[lena-i]=a[i]-48;//倒着储存数字a[]={1,2,3},aa[]={3,2,1};从1开始的,
        
    }
    for(int i=0;i<=lenb-1;i++)
    {
        bb[lenb-i]=b[i]-48;//倒着储存数字a[]={1,2,3},aa[]={3,2,1};从1开始的, 
    }
    // 运算 进位和借位
    int th=1,x=0;//竖式运算时个位对齐,一位一位往前加;
    //x为进位的数字,th为第几位; 
     while(th<=lena||th<=lenb)
     {
         cc[th]=aa[th]+bb[th]+x; 
         x=cc[th]/10;//进位是几; 
         cc[th]%=10;//本位是几; 
         th++;//位数加一 
     } 
    cc[th]=x;
    if(cc[th]==0)//如果最高位为零就不输出,所以位数减一; 
    {
        
        th--;
    } 
    for(int i=th;i>=1;i--)
    {
        
        printf("%d",cc[i]);
    } 
    printf("\n");
} 

 

大数加法