你的算法无错。。。但你有两个地方忽略了。。
我将你的代码改好给你吧。已通过。
/*杭电ACM 1002
悬赏分:30 - 离问题结束还有 6 天 0 小时
这是我用C++做的杭电ACM的1002题,请大家帮我看看哪里错了,为什么交上去老是通不过啊?先谢谢了。
http://acm.hdu.edu.cn/showproblem.php?pid=1002*/
#include
#include
using namespace std;
int main()
{
const int MAX = 1002; /*这里注意,有1000多位!!*/
const int T = 20;
short result[T][MAX];
char str1[T][MAX], str2[T][MAX];
int i, j, n, m[T];
int len1, len2;
while(cin >> n)
{
for(i=0;i
for(j=0;j
cin >> str1[i] >> str2[i];
len1 = strlen(str1[i]);
len2 = strlen(str2[i]);
j = 0;
while(len1>0 || len2>0)
{
if(len1 > 0)
{
result[i][j] += (str1[i][len1-1] - '0');
len1--;
}
if(len2 > 0)
{
result[i][j] += (str2[i][len2-1] - '0');
len2--;
}
if(result[i][j] >= 10)
{
result[i][j] -= 10;
result[i][j+1]++;
}
j++;
}
m[i] = j-1;
}
for(i=0;i
if(i)cout<
<< str2[i] << " = ";
if( 1 == result[i][m[i]+1])
cout << "1";
for(j=m[i];j>=0;j--)
cout << result[i][j];
cout << endl; /*已被改*/
}
}
return 0;
}
还有你不应该在总的处理后才进行输出,我觉得这是种不好的习惯,应该在得到两个数后,处理结果并输出再继续进行处理!
感觉你的方法太复杂了,也许你是想得太复杂了,就用三个数组就可以了塞,str1[],str2[],sum[];
然后对位相加,最后再进位就可以了,没有必要把每次的结果储存起来的。
你改进一下把。这个是我的代码,希望对你有所帮助。
#include
#include
int main()
{
int n,i,time=0;
int l1,l2;
int s;
char A[1000],B[1000],sum[1000];
scanf("%d",&n);
while(n--)
{
time++;
scanf("%s%s",A,B);
l1=strlen(A);
l2=strlen(B);
for(i=0;l1&&l2;i++)
{ l1--;
l2--;
sum[i]=A[l1]+B[l2]-'0';
}
while(l1)
{
l1--;
sum[i]=A[l1];
i++;
}
while(l2)
{
l2--;
sum[i]=B[l2];
i++;
}
s=0;
while(s
if(sum[s]>'9')
{
sum[s]-=10;
sum[s+1]+=1;
}
s++;
}
if(sum[s]>'9')
{
sum[s++]-=10;
sum[s]='1';
}
sum[++s]='\0';
printf("Case %d:\n%s + %s = ",time,A,B);
l1=strlen(sum);
while(l1--)
printf("%c",sum[l1]);
if(n>0)
printf("\n\n");
}
printf("\n");
return 0;
}