最近要开始刷一些高精相关的题了,加油↖(^ω^)↗
写在前面
我这里有一份高精相关题目(普及难度左右),接下来我都会刷里面的题,地址是:https://www.luogu.com.cn/training/9866。
题目描述
见https://www.luogu.com.cn/problem/P1601。
解题思路
整体上来说就是模拟加法竖式,将数字转成字符串来处理,逐个位加、进位。
细节处理上,注意如果两个数位数不一样的话,要在位数少的数前补零。
代码展示
细节注释都在代码块内:
#include <iostream> // std::cin, std::cout, std::endl #include <string> // std::string using namespace std; string add(string, string); // 高精加法函数 int main(void) { string str1, str2; cin >> str1 >> str2; cout << add(str1, str2) << endl; return 0; } string add(string str1, string str2) { int cf = 0, len1 = str1.length(), len2 = str2.length(), tmp = 0; string res; if(len1 < len2) // a比b短 { for (int i = 0; i < len2 - len1; i++) // 在a前面补零 { str1 = '0' + str1; } } else // 反之亦然 { for (int i = 0; i < len1 - len2; i++) { str2 = '0' + str2; } } len1 = str1.length(); // 现在两个数一样长了 for (int i = len1 - 1; i > -1; i--) // 倒着加,将进位数当做当前位和 { tmp = str1[i] - '0' + str2[i] - '0' + cf; // 加法,两个数的对应位相加,再加上一位的和 cf = tmp / 10; // 留下这一位的和 tmp %= 10; // 将这一位的进位数当做当前位的和 res = static_cast<char>(tmp + '0') + res; // 添加在结果前 } if (cf != 0) { res = static_cast<char>(cf + '0') + res; } return res; }
写在最后
这题也算圆满完成了↖(^ω^)↗