杭电acm1002答案

2024-11-23 00:53:25
推荐回答(1个)
回答(1):

题意: 给t组数据a,b,输出这两个大数的和
具体思路: 模拟加法的笔算过程
出错提醒: 1、最多1000位,基本数据类型范围不够,所以用字符串
2、此外,格式要特别注意一下,复制过来再修改
两个测试数据之间是有一行空白行的,但是最后一个测试数据后面没有空白行
代码效率: 0MS 212K 1009 B GCC
BY feng [2010/5/26]
*/
#include
#include
#define MAX 1002
char a[MAX],b[MAX],c[MAX];
int len_c; //和的位数
void CaculateAB() //计算a和b
{
int i, len_a,len_b,len_add, digit_sum,carry; //digit_sum对应位数的和,carry进位
len_a =strlen(a);
len_b =strlen(b);
len_add = (len_a<=len_b)? len_a:len_b;
carry =0;
for(i=0;i{
digit_sum=a[len_a-i-1]-48+b[len_b-i-1]-48+carry;
c[i] =digit_sum%10+48;
carry =digit_sum/10;
}
if(len_a>len_b)
{
for(;i {
digit_sum=a[len_a-i-1]-48+carry;
c[i] =digit_sum%10+48;
carry =digit_sum/10;
}
}
else
{
for(;i {
digit_sum=b[len_b-i-1]-48+carry;
c[i] =digit_sum%10+48;
carry =digit_sum/10;
}
}
if(carry>0) c[i++] =carry+48;
len_c = i;
}
int main(void)
{
int t,i,k;
scanf("%d",&t);
for(k=0;k{
scanf("%s%s",a,b);
CaculateAB();
printf("Case %d:\n%s + %s = ",k+1,a,b);
//c保存的是和的逆序排列,要逆序输出
for(i=0;i {
printf("%c",c[len_c-i-1]);
}
printf("\n");
if(k}
return 0;
}