大数加法计算器,各位能给个数据证明这个错了么。在NYOJ上就是WA,各种情况觉得自己考虑差不多了,郁闷中。。。
其中两个操作数必须是正数。首先输入一个是测试数据的组数,按回车。然后输入两个加数。中间用空格隔开。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int maxInt(int a,int b)
{
if(a > b)
return a;
else
return b;
}
int main()
{
char op1[1000] = {0};
char op2[1000] = {0};
char rel[1001] = {0};
int s;
int carry;
int len1;
int len2;
int i,j,k;
int rellen;
int temp;
int count = 1;
scanf("%d",&s);
for(;s > 0;s--)
{
carry = 0;
temp = 0;
scanf("%s %s",op1,op2);
len1 = strlen(op1);
len2 = strlen(op2);
rellen = maxInt(len1,len2) + 1;
for(i = len1 - 1,j = len2 - 1,k = rellen - 1;i >= 0 && j >= 0;i--,j--,k--)
{
temp = (op1[i] - '0') + (op2[j] - '0') + carry + rel[k];
rel[k] = temp % 10 + '0';
carry = temp / 10;
}
while(i >= 0)
{
temp = (op1[i] - '0') + carry;
rel[k] = temp % 10 + '0';
carry = temp / 10;
i--,k--;
}
while(j >= 0)
{
temp = (op2[j] - '0') + carry;
rel[k] = temp % 10 + '0';
carry = temp / 10;
j--,k--;
}
if(k >= 0)
rel[k] = '1';
printf("Case %d:\n",count++);
printf("%s + %s = ",op1,op2);
for(i = 0;i < rellen;i++)
{
if(rel[i] != '\0')
putchar(rel[i]);
}
putchar('\n');
}
}