200位以内的大整数相加问题
要求:多组输入,每组两个数字,放在一行,数字中间有一个空格。数字均不超过200位,输出这组数字之和。例如,输入:123 456,输出579疑问:1.编译没有问题,但是为什么输出的时候结果是 :三行“0”数字,如下
0
0
0
2.如果要求多组输入的两个数字不在一行,而是分为上下两行,输入的语句应该怎么改?
代码:
#include<stdio.h>
#include<string.h>
int main()
{
int big_integ_1={0};
int big_integ_2={0};//用来存放两组大整数
char big_strin_1={'\0'};
char big_strin_2={'\0'};//用来存放两组大整数的字符形式
while(scanf("%c %c",&big_strin_1,&big_strin_2)!=EOF)
{
for(int i=0;int j=strlen(big_strin_1)-1;j>=0)
{
big_integ_1=big_strin_1-'0';
}
for(int i=0;int j=strlen(big_strin_2)-1;j>=0)
{
big_integ_2=big_strin_2-'0';//分别把字符形式的大整数放到整型数组中
}
int p=0;
while(p<=200)
{
big_integ_1+=big_integ_2;
if(big_integ_1>=10)
{
big_integ_1++;
big_integ_1-=10;
}
p++;
}//将两组大整数相加,如果>=10,则进1 ,前面数字的位数小于后面的
int mark=0;
int i;
for(i=200;i>=0;i--)
{
if(big_integ_1!=0)
mark=i;
break;
}//从后往前,寻找第一个不为零的数,该数字的位数最大
if(i==-1)
printf("0\n");//说明遍历了整个数组都是0,最后输出0
else
{
for(int k=mark;k>=0;k--)
{
printf("%d",big_integ_1);
}
putchar('\n');
}//找到了第一个不为零的数字,并倒序输出,以确保 大位数字输出时在前
}
return 0;
} 多组输入 不知道是何意。是一次输入多组?还是循环输入多组。
如果是一次输入多组,那么题意是不是还要加个条件,最多不能超过多少组。
题意描述的不清不楚。如果这就是是原题那么这个出题的老师没出好。
你的代码我是没法改,我上了我的代码给参考:
#include<stdio.h>
#include<stdlib.h>
#define MAX_LEN 200
int main()
{
char a = {'\0'};
char b = {'\0'};
char sum = {'\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 = c;
}
else
{
b = 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-48; // 字符'0'转整 (int)'0'-48
}
tmpB = 0;
if(j>=0)
{
tmpB= (int)b-48;
}
tmp =tmpA + tmpB;
// 上一组相加是否有进位
if(cs)
{
tmp += cs; // 加上进位
}
// 当前是否要进位
cs = tmp / 10;
if(cs)
{
sum = (char)(tmp%10+48); // 有进位则取个位存储
}
else
{
sum = (char)(tmp+48); // 转字符串存储
}
}
k -= 1;
// 最后一位进位处理
if(cs)
{
sum = '1';
}
// 反向输出
for(i=k; i>=0; i--)
{
printf("%c", sum);
}
printf("\n");
return 0;
}
页:
[1]