应该是你的输入格式不对,题目要求的输入格式如下:
Sample Input
2
1 2
112233445566778899 998877665544332211
Sample Output
Case 1:
1 + 2 = 3
Case 2:
112233445566778899 + 998877665544332211 = 1111111111111111110
//这里是把所有要算的数一次性输入进去,之后再一次性把结果输出去,你的却是输入一组数据就输出一个结果
(真心想不通为什么满意答案没有给我? )
有五个问题
第一: case 首字母大写“Case”
第二: 输入的时候,数据可能有前导0, 会导致你的结果中多输出0
比如这个case 9999 000000001
第三: 指针错误。 你的pa, pb, 没有初始化。 当交换过后, 第二次在使用时,应该重新赋值
pa = a; pb = b; , 否则pa 则不是指向a的,而是指向b的。
第四: 当较短的数字加完后, 最后可能进一位, 而进的这一位有可能使较长的数字进位
如: 19345 655, 千位进一,万位进一;
第五: 格式错误, 每组测试数据之间有一个空行,而不是每个测试数据之后有一个空行。
下面是改好的程序,希望对你有用。
另外说几句:
这个题目把数字串倒过来算更方便。
你的程序中有一些无关紧要的判断,比如T的大小,数据的正负以及长度, 这些题目中都有详细的描述, 会保证符合题意的, 所以不同判断。
#include
using namespace std;
#include
#include
int main()
{
int i,j,T,k;
char a[1002],b[1002];//大整数转换为字符串处理
char *pa;
char *pb;
char *p;
cin>>T;//测试组数
if(T>=1&&T<=20){
for(k=1;k<=T;k++){
cin>>a>>b;
pa = a; // 第二个错误
pb = b;
if(strlen(a)>1000||strlen(b)>1000){//a,b超过一千位,不符题意return 0结束
return 0;}
else{
char c[1002]={"0"};//a,b相加得到的数位数超过a,b时,最前面补0,作为第1位数
if(atof(a)>0&&atof(b)>0){//atof(字符串转换为浮点数函数,包含在
if(strlen(a)>=strlen(b)){
strcat(c,a);}//将大的数前面补一个0
else{
p=pa;
pa=pb;
pb=p;
strcat(c,pa);}//同上
for(i=strlen(c)-1,j=strlen(pb)-1;i>=0,j>=0;){//从两数最后一位开始加
if((c[i]-'0'+pb[j]-'0')>=10){
c[i]=(c[i]-'0')+pb[j]-10;
i--;j--;
c[i]=c[i]+1;}//相加大于10的前面一位数加1
else{
c[i]=c[i]-'0'+pb[j];
i--;j--;}
}
while (c[i] - '0' >= 10) // 第四个错误
{
c[i] = c[i] - 10;
c[-- i] ++;
}
i = 0;
while (c[i] == '0') // 第三个错误
{
i ++;
}
cout<<"Case "<
cout<
{
cout << endl;
}
}
else
return 0;}
}
return 0;
}
return 0;
}
下面是把数字串倒过来的做法, 写的不好, 仅供参考, 如有错误, 不吝赐教。
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
#define MAX 2000
void reverse (char []);
int main()
{
int i, k;
int N, count = 0;
int lenA, lenB, value;
char A[MAX], B[MAX], sum[MAX], *p;
scanf ("%d", &N);
while (N --)
{
scanf ("%s%s", A, B);
reverse (A);
reverse (B);
lenA = strlen(A);
lenB = strlen(B);
memset(sum, '0', MAX);
k = 0;
for (i = 0; i < lenA && i < lenB; i ++)
{
value = A[i] - '0' + B[i] - '0';
if (value >= 10)
{
sum[k] = sum[k] + value - 10;
sum[k + 1] = '1';
}
else
{
value = sum[k] - '0' + value;
if (value >= 10)
{
sum[k] = '0';
sum[k + 1] = '1';
}
else
{
sum[k] = value + '0';
}
}
k ++;
}
p = A;
if (i == lenA)
{
p = B;
}
for (; i < strlen(p); i ++)
{
value = sum[k] - '0' + p[i] - '0';
if (value >= 10)
{
sum[k] = '0';
sum[k + 1] = '1';
}
else
{
sum[k] = value + '0';
}
k ++;
}
if (sum[k] != '0')
{
k ++;
}
sum[k] = '\0';
reverse (A);
reverse (B);
reverse (sum);
printf ("Case %d:\n", ++ count);
printf ("%s + %s = %s\n", A, B, sum);
if (N >= 1)
{
printf ("\n");
}
}
return 0;
}
void reverse (char A[])
{
int len;
int i, temp;
len = strlen(A);
for (i = 0; i < len / 2; i ++)
{
temp = A[i];
A[i] = A[len - i - 1];
A[len - i - 1] = temp;
}
}