赞
踩
蓝桥杯备赛 | 洛谷做题打卡day4
高精度加法,相当于 a+b problem,不用考虑负数。
分两行输入。 a , b ≤ 1 0 500 a,b \leq 10^{500} a,b≤10500。
输出只有一行,代表 a + b a+b a+b 的值。
1
1
2
1001
9099
10100
学会利用新知,自己多试试并尝试积攒一些固定解答方案,debug,以下是我的代码 ~
#include<iostream> using namespace std; int a[1000001], b[1000001], c[1000001], j; bool x = false; char s[1000001], ss[1000001]; int main() { cin >> s >> ss; a[0] = strlen(s); b[0] = strlen(ss);//获取长度 for (int i = 1; i <= a[0]; i++) a[i] = s[a[0] - i] - '0'; for (int i = 1; i <= b[0]; i++) b[i] = ss[b[0] - i] - '0';//注意:将s,ss中的字符依次逆序转化为数字装入数组a,b中 for (j = 1; j <= max(a[0], b[0]) + 1; j++) //这一行循环条件最好不要擅自更改,整体性理解 { c[j] = a[j] + b[j]; if (c[j] >= 10) { c[j] %= 10; a[j + 1]++;//a[j + 1]或b[j + 1]均可,这段是逆序处理进位问题,重在理解 } }//模拟加法 c[0] = j;//循环结束后,j即为数组最大长度+1 if (c[j + 1] > 0) c[0]++;//特判进位 for (int i = c[0]; i >= 1; i--) {//逆序输出(删除前导零) if (x == false && c[i] == 0) continue;//好奇这个continue的作用 x = true; cout << c[i]; } if (x == false) cout << 0;//一重保险 printf("\n");//二重保险 return 0;//三重保险 }
我的一些话
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。