题目描述:输入两个整数a和b,输出这两个整数的和。a和b都不超过100位
输入格式
输入包括两行,第一行为一个非负整数a,第二行为一个非负整数b。两个整数都不超过100位,两数的最高位都不是0。
输出格式
输出一行,表示a + b的值。
说明/提示
注意数据范围不在32位整型范围内
根据提示,数据范围并不在32位整形范围内,因此用常规算法一定行不通。此类问题用字符串解决!
具体代码如下:
#include <stdio.h>
#include<string.h>
int main()
{
int i,alen,blen; //定义alen,blen字符串长度
char a[101], b[101], c[102]; //定义字符串a,b,c用来存放输入和输出
memset(c,0,sizeof(c));//初始化(清空)内存块
scanf("%s%s", a, b); //输入两个整数
alen = strlen(a); //strlen()读取字符串长度
blen = strlen(b);
//因为a,b的长度是未知的,要保证取遍字符串中的所有值,可以用“||”
for (i = 0; i < alen || i < blen; i++)
{
if (i < alen) //b[i]-'0'是把b[i](一个数字字符)
// 转换为与字面同值的数字。例如,把'2'转换为2。
c[i] += a[alen-i-1] - '0';//这里还要考虑到字符串输入顺序与数字位数的关系
if (i < blen)
c[i] += b[blen-i-1] - '0';
if (c[i] >= 10) //模拟加法运算中的“满十进一”
{
c[i+1] = c[i] / 10;
c[i] %= 10;
}
}
if (alen < blen) alen = blen;
//输出结果,这里要注意相加后的结果可能是更高位,所以要先判断一下是否更高一位有数
if (c[alen] > 0) printf("%d", c[alen]);
for (i = alen - 1; i >= 0; i--)
printf("%d", c[i]);
return 0;
}
如果还有什么问题,欢迎评论!