HDU-1002 大数加法 C语言实现 一直AC不了 求助贴
A + B问题II时间限制:2000/1000 MS(Java / Others)内存限制:65536/32768 K(Java /其他)
提交总数:428360接受提交内容:83218
问题描述
我有一个非常简单的问题。给定两个整数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
Sample Output
Case 1:
1 + 2 = 3
Case 2:
112233445566778899 + 998877665544332211 = 1111111111111111110
我的实现:
#include <stdio.h>
#include <string.h>
int mark;
void add(char a[],char b[],char c[])
{
int len1,len2;
int i,j,L=0;
int temp;
len1=strlen(a);
len2=strlen(b);
for(i=0;i<len1/2;i++)
{
temp = a[i];
a[i] = a[len1-i-1];
a[len1-i-1] = temp;
}
for(i=0;i<len2/2;i++)
{
temp = b[i];
b[i] = b[len2-i-1];
b[len2-i-1] = temp;
}
for(i=0;i<len1&&i<len2;i++)
{
j = (a[i]-'0'+b[i]-'0'+L)%10;
L = (a[i]-'0'+b[i]-'0'+L)/10;
c[i] = j+'0';
}
if(i<len1)
{
for(;i<len1;i++)
{
j = (a[i]-'0'+L)%10;
L = (a[i]-'0'+L)/10;
c[i] = j+'0';
}
}
if(i<len2)
{
for(;i<len2;i++)
{
j = (b[i]-'0'+L)%10;
L = (b[i]-'0'+L)/10;
c[i] = j+'0';
}
}
while(L)
{
c[i++] =(L%10+'0');
L/=10;
}
mark = i-1;
}
int main()
{
int k;
//int i;
char a[1001],b[1001],c[1001];
int n;
scanf("%d",&n);
int m;
if(n>=2){
for(m=0;m<n-1;m++)
{
scanf("%s%s",a,b);
add(a,b,c);
printf("Case %d:\n",m+1);
printf("%s + %s = ",a,b);
for(k=mark;k>=0;k--)
{
printf("%c",c[k]);
}
printf("\n\n");
}
while(scanf("%s%s",a,b)!=EOF)
{
add(a,b,c);
printf("Case %d:\n",n);
printf("%s + %s = ",a,b);
for(k=mark;k>=0;k--)
{
printf("%c",c[k]);
}
printf("\n");
}
}
else
{
while(scanf("%s%s",a,b)!=EOF)
{
add(a,b,c);
printf("Case 1:\n");
printf("%s + %s = ",a,b);
for(k=mark;k>=0;k--)
{
printf("%c",c[k]);
}
printf("\n");
}
}
return 0;
}
[此贴子已经被作者于2018-8-9 23:58编辑过]