题目描述:
对于输入的两个不超过100位数字的非负整数,给出两数之和。
输入格式:
在两行中分别给出两个不超过100位数字的非负整数
输出格式:
在一行中输出两数之和
输入样例:
123
12
输出样例:
135
解题思路:
采用IPO思路实现:
(1)I:
为了实现个位对齐、方便计算,将数字当作字符串读入,然后转为数字;
(2)P:
大致的思路如下
sum = (a + b + 进位) % 10;
进位 = (a + b + 进位) / 10;
(3)O:
输出结果即可
代码如下:
#include <iostream>
using namespace std;
const int max_len = 1024;
int num[2][max_len] = { 0 };
int len[2] = { 0 };//边界判断-1
int sum[max_len] = { 0 };
void in_put() {
string str[2];
cin >> str[0] >> str[1];
len[0] = str[0].size(); len[1] = str[1].size();
for (int i = 0; i < 2; i++) {
int i_1 = max_len - 1, i_2 = len[i] - 1;
while (i_2 != -1) {
num[i][i_1] = str[i][i_2] - '0';
i_1--, i_2--;
}
len[i] = i_1;//边界判断-1
}
}
int calc() {
int i_s = max_len - 1, i_1 = max_len - 1, i_2 = max_len - 1;
while (i_1 > len[0] || i_2 > len[1]) {//边界判断-1
sum[i_s - 1] = (num[0][i_1] + num[1][i_2] + sum[i_s]) / 10;
sum[i_s] = (num[0][i_1] + num[1][i_2] + sum[i_s]) % 10;
i_s--, i_1--, i_2--;
}
return sum[i_s] ? i_s : i_s + 1;//边界判断-2
}
void out_put(int high) {
while (high != max_len) {//边界判断-2
cout << sum[high++];
}
cout << endl;
}
int main() {
in_put();
out_put(calc());
return 0;
}
日志:
2022-10-28 发布
2023-1-10 改进算法和思路介绍部分