高精度加法,将数字存储为字符串,然后按照小学加法的原理从最低位一次加到最高位。
如果两个加数长度不一样,需要将较短的一个在前面补零,使两者长度相等。
#include <bits/stdc++.h>
using namespace std;
string add(string str1, string str2)//高精度加法
{
string str;
int len1 = str1.length();
int len2 = str2.length();
//前面补0,弄成长度相同
if (len1 < len2)
{
for (int i = 1; i <= len2 - len1; i++)
str1 = "0" + str1;
}
else
{
for (int i = 1; i <= len1 - len2; i++)
str2 = "0" + str2;
}
len1 = str1.length();
int cf = 0;
int temp;
for (int i = len1 - 1; i >= 0; i--)
{
temp = str1[i] - '0' + str2[i] - '0' + cf;
cf = temp / 10;//模拟两数相加,只取个位
temp %= 10;//其余位用于向下一位进位
str = char(temp + '0') + str;
}
if (cf != 0) str = char(cf + '0') + str;
return str;
}
int main() {
string s1 = "";
string s2 = "";
cin >> s1 >> s2;
cout << add(s1, s2) << endl;
return 0;
}