多组输入 不知道是何意。是一次输入多组?还是循环输入多组。
如果是一次输入多组,那么题意是不是还要加个条件,最多不能超过多少组。
题意描述的不清不楚。如果这就是是原题那么这个出题的老师没出好。
你的代码我是没法改,我上了我的代码给参考:#include<stdio.h>
#include<stdlib.h>
#define MAX_LEN 200
int main()
{
char a[MAX_LEN] = {'\0'};
char b[MAX_LEN] = {'\0'};
char sum[MAX_LEN+1] = {'\0'};
char c;
int i, j, k, second, aLen, bLen, len, tmp, tmpA, tmpB, cs;
// 获取输入 保存到a和b中
i=0;
second = 0;
while( (c=getchar())!='\n' )
{
if(c!=' ')
{
if(!second)
{
a[i] = c;
}
else
{
b[i] = c;
}
i++;
}
else
{
aLen = i-1; // 保存a的长度
i=0;
second = 1;
}
}
bLen = i-1; // 保存b的长度
// 保存a,b效长的到len
len = aLen;
if (bLen>aLen)
{
len = bLen;
}
// 相加保存到sum中
cs = 0; // 进位标志
for(i=aLen, j=bLen, k=0; len>=0; i--,j--, k++, len--)
{
tmpA = 0;
if(i>=0)
{
tmpA = (int)a[i]-48; // 字符'0'转整 (int)'0'-48
}
tmpB = 0;
if(j>=0)
{
tmpB= (int)b[j]-48;
}
tmp = tmpA + tmpB;
// 上一组相加是否有进位
if(cs)
{
tmp += cs; // 加上进位
}
// 当前是否要进位
cs = tmp / 10;
if(cs)
{
sum[k] = (char)(tmp%10+48); // 有进位则取个位存储
}
else
{
sum[k] = (char)(tmp+48); // 转字符串存储
}
}
k -= 1;
// 最后一位进位处理
if(cs)
{
sum[k++] = '1';
}
// 反向输出
for(i=k; i>=0; i--)
{
printf("%c", sum[i]);
}
printf("\n");
return 0;
}
|