优质解答
#include
#include
#include
int main() {
int i,j,k,T,carry;
int lena,lenb,num;
char ch,c[1000] = {0};
char a[1000],b[1000];
scanf("%d",&T);
while(T > 0) {
i = 0;
printf("\na[] = ");
while(1) { // 读取a[],'\n'结束读入过程
fflush(stdin);
ch = _getch();
if(ch == '\r') break;
if(ch >= '0' && ch <= '9') {
a[i++] = ch;
printf("%c",ch);
}
}
a[i] = '\0';
printf("\nb[] = ");
i = 0;
while(1) { // 读取b[],'\n'结束读入过程
fflush(stdin);
ch = _getch();
if(ch == '\r') break;
if(ch >= '0' && ch <= '9') {
b[i++] = ch;
printf("%c",ch);
}
}
b[i] = '\0';
lena = strlen(a);
lenb = strlen(b);
carry = 0; // 进位
k = 0;
// 从个位开始加,逆向存储相加结果
for(i = lena - 1,j = lenb - 1; i >= 0 && j >= 0; --i,--j) {
num = a[i] + b[j] - '0' - '0' + carry; // 求得该位的和
c[k++] = num % 10 + '0'; // 获取该位数字
carry = num / 10; // 获取进位
}
while(i >= 0) { // 处理更长的数
num = a[i--] + carry - '0';
c[k++] = num % 10 + '0';
carry = num / 10;
}
while(j >= 0) { // 处理更长的数
num = a[j--] + carry - '0';
c[k++] = num % 10 + '0';
carry = num / 10;
}
if(carry) c[k++] = carry + '0';
c[k] = '\0';
for(i = 0;i
ch = c[i];
c[i] = c[k - 1 - i];
c[k - 1 - i] = ch;
}
printf("\n%s + %s = %s\n",a,b,c);
--T;
}
return 0;
}