ZZULIOJ 1151: 大整数加法

题目描述比利经常会碰到超大整数的加法运算,而普通的计算器上无法进行。因此他想你帮他写一个程序来计算结果。

输入输入数据有多组。首先输入一个整数T,表示有T组输入。
每组输入两个大整数,并用空格隔开。每个整数最多1000位。没有负数输入。
输出对于每组输入,输出两个整数的和,单独占一行。

样例输入2
1 2
112233445566778899 998877665544332211
样例输出3
1111111111111111110

#include<bits/stdc++.h>
using namespace std;
char a[1010],w[1010],b[1010];
char c[1010];
int main(){
 int t,i,j,k=0,g,h;
 cin>>t;
 while(t--){
  k=0;
  memset(a,0,sizeof(a));
  memset(b,0,sizeof(b));
  memset(c,0,sizeof(c));
  scanf("%s%s",a,b);
    int len,len1=strlen(a),len2=strlen(b);                     
    if(len2!=len1){                                
     if(len2>len1){                               //确保a字符串为最大字符串
           strcpy(w, a);
           strcpy(a, b);
           strcpy(b, w);
     }
           len=strlen(a)-strlen(b);
           int c=strlen(a)-1,x=0;
    for(i=strlen(b)-1;i>=0;i--){              //对b字符串进行补0   例如99 9 把9补为09
     b[c-x]=b[i];
     x++;
    }
    for(i=0;i<len;i++)
    b[i]='0';
}        
         h=0;
        for( i=strlen(a)-1; i>=0;i--){
             g = (a[i] - '0') + (b[i] - '0') + h;
            if (g > 9){
                c[k] = g-10+'0';    h = 1;
            }
            else{
                c[k] = g+'0';       h = 0;
            }
            k++;
        }
        if(h==1)       c[k] = 1+'0';
        else           k--;
        for(i=k;i>=0;i--)     
  printf("%c",c[i]);
        printf("\n");
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_43731933/article/details/84436170
今日推荐