A + B问题II
时间限制:2000/1000 MS(Java /其他)内存限制:65536/32768 K(Java /其他)
总提交数量:525503接受提交数量:100467
问题描述
对您来说,我有一个非常简单的问题。给定两个整数A和B,您的工作是计算A + B的总和。
输入项
输入的第一行包含一个整数T(1 <= T <= 20),它表示测试用例的数量。然后是T行,每行由两个正整数A和B组成。请注意,这些整数非常大,这意味着您不应使用32位整数对其进行处理。您可以假设每个整数的长度不超过1000。
输出量
对于每个测试用例,您应该输出两行。第一行是“ Case#:”,#表示测试用例的编号。第二行是等式“ A + B = Sum”,Sum表示A + B的结果。请注意,该等式中有一些空格。在两个测试用例之间输出空白行。
样本输入
2
1 2
112233445566778899 998877665544332211
样本输出
情况1:
1 + 2 = 3
情况2:
112233445566778899 + 998877665544332211 = 1111111111111111110
作者
伊格纳修斯
推荐
我们为您精心选择了几个类似的问题: 1000 1001 1004 1003 1008
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
const int MAX=1000;
int max(const char*a,const char*b)
{
int len_1=strlen(a);
int len_2=strlen(b);
return len_1<len_2?len_2:len_1;
}
int main()
{
int t,s=1;
char a[1000],b[1000],c[1000],tmp1A[1000],tmp2B[1000];
int i=0,k=0,len1=0,len2=0,max_len=0,min_len=0;
scanf("%d",&t);
getchar();
while(t--)
{
scanf("%s",a);
getchar();
scanf("%s",b);
getchar();
strcpy(tmp1A,a);
strcpy(tmp2B,b);
len1=strlen(a),len2=strlen(b);
max_len=len1>len2?len1:len2;//得到长数组的长度
min_len=len1<len2?len1:len2;//得到短的长度
if(max_len==strlen(a))//如果a数组较长,那么就把b数组加到a数组里面去
{
for( k = 0 ; k < min_len ; k++)
{
a[max_len-1-k]+=(b[min_len-1-k]-'0');//下标采用逆序访问数组元素
if(a[max_len-1-k]>'9')//如果存在进位
{
a[max_len-2-k]++;//进位
a[max_len-1-k]-=10;//保留个位数
}
}
printf("Case %d:\n",s++);
printf("%s + %s = %s\n",tmp1A,tmp2B,a);
}
// 下面的就是反过来了,b数组较长,而a数组较短
else
{
for(k = 0 ; k < min_len ; k++)
{
b[max_len-1-k]+=(a[min_len-1-k]-'0');
if(b[max_len-1-k]>'9')
{
b[max_len-2-k]++;
b[max_len-1-k]-=10;
}
}
printf("Case %d:\n",s++);
printf("%s + %s = %s\n",tmp1A,tmp2B,b);
}
if(t)
printf("\n");
}
}
/*
999
10000
*/