一、为什么要使用高精度算法?
在C++中,常常有输入的值超过long long,那么就会爆!!!所以,我们就要使用高精度算法。
二、什么是高精度算法?
顾名思义,高精度算法就是把数字存入数组,再用数组进行运算,只不过不能直接算,而是要——模拟手算!!!
三、高精度加法步骤
1. 读入两个字符串,将其转化为数字逆序存储在数组中,数组下标从0开始,存储的是个位数。
2. 从低位到高位,将两个数字相加,如果有进位则将进位加到下一位。
3. 最后将结果输出即可。
四、程序
#include <bits/stdc++.h>
using namespace std;int main() {
string a = "", b = "";
int ans[501] = {}, n1[500] = {}, n2[500] = {};
cin >> a >> b;int lena = a.length(), lenb = b.length(); //获取长度
int len = max(lena, lenb); //比较出最长的长度for (int i = 0; i < lena; i++) {
n1[i] = int(a[lena - i - 1]) - 48; //从字符强制转换成整数,然后倒序存入
}//倒序存入
for (int i = 0; i < lenb; i++) {
n2[i] = int(b[lenb - i - 1]) - 48; //从字符强制转换成整数,然后倒序存入
}//倒序存入
//以上为准备工作
for (int i = 0; i < len; i++) {
ans[i] += n1[i] + n2[i]; //正常加法
ans[i + 1] += ans[i] / 10; //进位
ans[i] %= 10; //进位完了后取余
}
if (ans[len] == 0)
len++;//首位进位加加
//以上为核心代码
//以下为非必要代码,但洛谷要用
while (len > 1
&& ans[len - 1] == 0) { //如果数组末尾(也就是数字的开头)为0(ans[len-1]==0),则去除掉(len--),但要排除它输入本身就是0的可能(len>1)
len--;
}
for (int i = len - 1; i >= 0; i--) {
cout << ans[i];
}//倒序输出
return 0;
}