优化题解
2025-04-28 05:49:03
发布于:四川
2阅读
0回复
0点赞
/* 由于字符串a和b的长度可达200,故不能将其一次性转换为数字进行求和计算,只能从个位开始一位一位地将其转换为数字进行求和计算,商作为进位提供给下一位的求和计算,余数作为该位计算的结果,转换为字母保存。 特别注意:计算结果要去除首位零。
*/
#include <bits/stdc++.h>
using namespace std;
string fun(string s1, string s2) { // 求和计算的函数
string result; // result 表示最终计算结果
int x = 0; // x 表示进位
int i = s1.size() - 1; // i 表示 s1 的下标,从 s1 最后一位开始
int j = s2.size() - 1; // j 表示 s2 的下标,从 s2 最后一位开始
while (i >= 0 || j >= 0 || x > 0) { // 当i、j、x任有一个大于等于零时进入循环计算
int n1 = (i >= 0) ? s1[i] - 'A' : 0; // 将 s1[i] 转换为数字保存在 n1 中
int n2 = (j >= 0) ? s2[j] - 'A' : 0; // 将 s2[j] 转换为数字保存在 n2 中
int sum = n1 + n2 + x; // 每一位求和,用sum记录求和结果
x = sum / 20; // sum 除以20的商作为进位保存到 x 中
int r = sum % 20; // sum 除以20的余数保存到 r 中
result = char(r + 'A') + result; // 余数r转换为字母保存到 result 中
i--, j--; // 一轮计算结束,s1 和 s2 均向前移动一位
}
while (s[0] == 'A') s.erase(0, 1); // 去掉首位零
return result; // 返回计算结果 result
}
int main() {
string s1, s2;
cin >> s1 >> s2;
string s = fun(s1, s2);
cout << s << endl;
return 0;
}
这里空空如也
有帮助,赞一个