Problem Description
I have a very simple problem for you.Given two integers A and B, your job is to calculate the Sum of A + B.
Input
The first line of the input contains aninteger T(1<=T<=20) which means the number of test cases. Then T linesfollow, each line consists of two positive integers, A and B. Notice that theintegers are very large, that means you should not process them by using 32-bitinteger. You may assume the length of each integer will not exceed 1000.
Output
For each test case, you should outputtwo lines. The first line is "Case #:", # means the number of thetest case. The second line is the an equation "A + B = Sum", Summeans the result of A + B. Note there are some spaces int the equation. Outputa blank line between two test cases.
Sample Input
2
1 2
112233445566778899 998877665544332211
Sample Output
Case 1:
1 + 2 = 3
Case 2:
112233445566778899 + 998877665544332211 = 1111111111111111110
最重要的是这不是int,long,longlong,数据类型的,A和B可能到1000位数,要用字符串去存储,并用字符串输出;
之后的问题就是进位和 A和B的长度问题
再之,字符常量’1’和整形常量1的区别
在wa的时候也有输出格式的小问题,每次循环执行的最后一次只有一个换行,其余两个换行
这几个问题考虑到后,花些心思,代码应该出得来
以下是代码:
#include<stdio.h>
#include<string.h>
intmain()
{
int i, j, step, temp, num; // step仅为计数,temp用于判断是否进1
int n, alen, blen; //alen blen 分别表示a[1001],b[1001]的长度
char a[1001], b[1001], sum[1010]; //a[1001]存储A, b[1001]存储B, sum[1001]存储AB的和
while(scanf("%d", &n) !=EOF){
num = 0;
for (i = 1; i <= n; i++)
{
step = 0;
temp = 0;
scanf("%s %s", a,b);
alen = strlen(a);
blen = strlen(b);
do {
step++;
if (temp >= 10)
temp = 1;
else
temp = 0; //上一次的temp>10 进1
temp += a[alen -step] + b[blen - step] - '0' - '0';
sum[step - 1] = temp% 10 + '0';
}while(alen - step != 0&& blen - step != 0); //若alen或blen已经到头结束循环
if (alen == blen)
{
if (temp >= 10)
{
step++;
sum[step - 1]= '1';
}
printf("Case%d:\n", ++num);
printf("%s + %s= ", a, b);
for (j = step - 1; j>= 0; j--)
printf("%c",sum[j]);
if (num == n)
printf("\n");
else
printf("\n\n");
}
else if (alen > blen)
{
while(temp >=10){
step++;
if (step -alen == 1)
{
sum[step- 1] = '1';
break;
}
temp = 1 +a[alen - step] - '0';
sum[step - 1]= temp % 10 + '0';
}
while(step <alen){
step++;
sum[step - 1]= a[alen - step];
}
printf("Case%d:\n", ++num);
printf("%s + %s= ", a, b);
for (j = step - 1; j>= 0; j--)
printf("%c",sum[j]);
if (num == n)
printf("\n");
else
printf("\n\n");
}
else
{
while(temp >=10){
step++;
if (step -blen == 1)
{
sum[step- 1] = '1';
break;
}
temp = 1 +b[blen - step] - '0';
sum[step - 1]= temp % 10 + '0';
}
while(step <blen){
step++;
sum[step - 1]= b[blen - step];
}
printf("Case%d:\n", ++num);
printf("%s + %s= ", a, b);
for (j = step - 1; j>= 0; j--)
printf("%c",sum[j]);
if (num == n)
printf("\n");
else
printf("\n\n");
}
}
}
}