天天看點

九度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
    ****************************************************************/