A+B Problem II
时间限制:
3000 ms | 内存限制:
65535 KB
难度:
3
-
描述
-
I have a very simple problem for you. Given two integers A and B, your job is to calculate the Sum of A + B.
A,B must be positive.
-
输入
- The first line of the input contains an integer T(1<=T<=20) which means the number of test cases. Then T lines follow, each line consists of two positive integers, A and B. Notice that the integers are very large, that means you should not process them by using 32-bit integer. You may assume the length of each integer will not exceed 1000. 输出
- For each test case, you should output two lines. The first line is "Case #:", # means the number of the test case. The second line is the an equation "A + B = Sum", Sum means the result of A + B. Note there are some spaces int the equation. 样例输入
-
2 1 2 112233445566778899 998877665544332211
样例输出
-
Case 1: 1 + 2 = 3 Case 2: 112233445566778899 + 998877665544332211 = 1111111111111111110
#include<cstdio>
#include<cstring>
int test=0;
struct Num{
int len;
char num[1000+5];
}A,B;
void Init(Num &a){
a.len=strlen(a.num);
}
void swap(char &a,char &b){
char t=a;
a=b;
b=t;
}
void Reverse(Num &a){
a.len=strlen(a.num);
for(int i=0;i<a.len-i-1;i++)
swap(a.num[i],a.num[a.len-1-i]);
}
void add(Num &a,Num &b){
Reverse(a);
a.num[a.len]='0';
for(int i=0;i<a.len;i++){
if(b.len-1-i>=0){
a.num[i]+=b.num[b.len-1-i]-'0';
}
if(a.num[i]>'9'){
a.num[i+1]++;
a.num[i]-=10;
}
}
int max_len=a.num[a.len]=='0'?a.len-1:a.len;
for(int j=max_len;j>=0;j--)
printf("%c",a.num[j]);
printf("\n");
}
int main(){
int n;
scanf("%d",&n);
while(n--){
scanf("%s%s",A.num,B.num);
Init(A);
Init(B);
printf("Case %d:\n",++test);
for(int i=0;i<A.len;i++)
printf("%c",A.num[i]);
printf(" + ");
for(int j=0;j<B.len;j++)
printf("%c",B.num[j]);
printf(" = ");
A.len>B.len?add(A,B):add(B,A);
}
}