2.424 - Integer Inquiry

**最后要换行** 
本题为高精度加法计算. 
录入数据后,把每行填加前导0后使长度相同. 
再从最后一列开始求和、进位、取余. 
计算完毕后,如果进位不为0,就输出,作为最高位. 
54321
50543
5
=>
 54321
 50543
 00005
------
104869

#define maxn 128 
int main() 

    char num[maxn][maxn]; 
    int k=0,len[maxn],max=0; 
    while(scanf("%s",num[k])!=EOF&&strcmp(num[k],"0")!=0) 
    { 
        len[k]=strlen(num[k]); 
        if(len[k]>max) 
            max=len[k]; 
        k++; 
    } 
    for(int i=0; i<k; i++) 
    { 
        if(len[i]<max) 
        { 
            int x=len[i],y=max,mid=y-x; 
            for(int j=x-1; j>=0; j--) 
                num[i][j+mid]=num[i][j]; ///往后移动j+mid位,使之从下标为max-1开始填,然后下面填前导0.
            for(int j=0; j<y-x; j++) ///添加前导0,使每一行长度相等.
                num[i][j]='0'; 
        } 
    } 
    int ans[maxn],fro=0; ///fro 为进位(初始化为0 <=计算个位的时候,没有进位).
    for(int i=max-1; i>=0; i--) ///从最后一位开始求和、取余、进位.
    { 
        ans[i]=fro; 
        for(int j=0; j<k; j++) 
            ans[i]+=num[j][i]-'0'; 
        fro=ans[i]/10; 
        ans[i]%=10; 
    } 
    if(fro!=0) ///最高位不为0,输出之
        printf("%d",fro); 
    for(int i=0; i<max; i++) 
        printf("%d",ans[i]); 
    putchar('\n'); 
    return 0; 

你可能感兴趣的:(uva,Big_number)