原题链接:川哥的吩咐
解题思路:用字符数组储存两个加数,从个位开始,进行相加,结果存放另一个数组里,(顺便考虑是否进位) 注意事项: 在下的方法 要注意 每次输入数据时,要进行清空数组和进位标志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、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复