首页 > 代码库 > 九度OJ—题目1198:a+b(高精度计算)

九度OJ—题目1198:a+b(高精度计算)

题目描述:

实现一个加法器,使其能够输出a+b的值。

输入:

输入包括两个数a和b,其中a和b的位数不超过1000位。

输出:

可能有多组测试数据,对于每组数据,
输出a+b的值。

样例输入:
2 6
10000000000000000000 10000000000000000000000000000000
样例输出:
8
10000000000010000000000000000000
来源:
2010年华中科技大学计算机研究生机试真题
答疑:
解题遇到问题?分享解题心得?讨论本题请访问:http://t.jobdu.com/thread-7921-1-1.html


    #include <stdio.h> 
    #include <string.h> 
           
    #define Max 1001//有进位1001 
     
    int bigNumAdd(char a[],char b[],char sum[]) 
    {
        int i=0; 
        int c=0;//表示进位 
     
        //清0
        char m[Max]={0}; 
        char n[Max]={0};
        memset(sum,0,1001); 
           
        //字符串反转且字符串变数字 
        int lenA=strlen(a); 
        int lenB=strlen(b);
                
        int result_len = (lenA > lenB)?lenA:lenB; 
     
        for (i=0;i<lenA;i++) 
        { 
           m[i]=a[lenA-i-1]-'0'; 
        } 
        for (i=0;i<lenB;i++) 
        { 
           n[i]=b[lenB-i-1]-'0'; 
        } 
           
        //位运算:如果最后一位进位len+1 
        for (i=0;i<result_len;i++) 
        { 
           sum[i]=(m[i]+n[i]+c)%10+'0';//得到末位 
           c=(m[i]+n[i]+c)/10;//得到进位
        } 
     
        //最后一次有进位,要把进位后的那一位赋值为1,并且sum总长度加1 
        if (c) 
        {
            sum[result_len]=c+'0';
            result_len++;       
        } 
       
        return result_len;
    }  
     
     
    void print(char sum[],int result_len) 
    { 
        int i;  
     
        for(i=result_len-1; i>=0; i--) 
        { 
            printf("%c",sum[i]); 
        }  
    }
     
    int main() 
    {
        char a[Max]; 
        char b[Max]; 
        char sum[Max]; 
     
        while(scanf("%s%s",a,b)!=EOF)
        {
            print(sum,bigNumAdd(a,b,sum));
            printf("\n");
        }
        return 0; 
    } 
     
           
      
    /**************************************************************
        Problem: 1198
        User: vhreal
        Language: C
        Result: Accepted
        Time:90 ms
        Memory:912 kb
    ****************************************************************/



九度OJ—题目1198:a+b(高精度计算)