原题链接:川哥的吩咐
解题思路:用字符数组储存两个加数,从个位开始,进行相加,结果存放另一个数组里,(顺便考虑是否进位)
注意事项: 在下的方法 要注意 每次输入数据时,要进行清空数组和进位标志count赋值0;
要考虑两个加数长度是否相等,以及最高位是否进位
参考代码:
#include<stdio.h>
#include<string.h>
int main()
{
char str1[1100], str2[1100]; //定义两个字符串,表示两个加数
int i, L1, L2, count = 0,num[1100] = { 0 };
while (scanf("%s %s", str1, str2) != EOF) //输入两个字符串
{
count = 0; //count表示进位,每次输入赋值为0
memset(num, 0, sizeof(num)); // 数组num 代表 和 的即结果,每次清空数组
L1 = strlen(str1); //L1表示第一个加数的长度
L2 = strlen(str2); //L2表示第二个加数的长度
for (i = 1005; L1 > 0 || L2 > 0; i--) //为了防止加数 位数过多,i从1005开始
{
if (L1 > 0 && L2 > 0) //当相同位 上都有数字时,进行相加
{
num[i] = str1[L1 - 1] + str2[L2 - 1] + count - 2 * '0';
L1--;
L2--;
}
else //当某一个数字的已经计算到最高位时,进行赋值
{
if (L1 > 0 && !L2) //当第二个数字已经计算到最高位时
{
num[i] = str1[L1 - 1] + count - '0';
L1--;
}
else if (!L1&&L2 > 0) //当第一个数字已经计算到最高位时
{
num[i] = str2[L2 - 1] + count - '0';
L2--;
}
}
if (num[i] > 9) //当前位的和 超过10 ,进位!
{
num[i] -= 10;
count = 1;
}
else //当前位的和 不超过10 , 不进位!
count = 0;
}
if (count == 1) //这一步的if else 语句, 是为了计算 :
{ // 如果两个加数长度相等,最高位是否进位
num[i] = 1;
for (; i <= 1005; i++)
printf("%d", num[i]); //输出结果
}
else
{
for (i++; i <= 1005; i++) //如果两个加数长度不等,或者长度相等最高位不存在进位
printf("%d", num[i]); // 输出结果
}
printf("\n");
}
return 0;
}0.0分
2 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复