题目描述
高精度加法,相当于a+b problem,不用考虑负数.
输入格式
分两行输入。a,b≤10的500次方
输出格式
输出只有一行,代表a+b的值
输入 #1
1
1
输出 #1
2
输入 #2
1001
9099
输出 #2
10100
代码:
#include<iostream>
#include<string.h>
using namespace std;
string x, y;
int a[100000], b[100000], c[100000], la, lb, lc;
int main()
{
//1.字符串读入
//2.字符串转数组
//3.竖式加法
//4.消去前导0
//5.倒序输出
//字符串读入
cin >> x >> y;
la = x.length();
lb = y.length();
//字符串转数组
for (int i = 0; i < la; i++)
{
a[la - i] = x[i] - '0';
}
for (int i = 0; i < lb; i++)
{
b[lb - i] = y[i] - '0';
}
//竖式加法
lc = max(la, lb);
for (int i = 1; i <= lc; i++){
c[i] += a[i] + b[i];
c[i + 1] = c[i]/10;
c[i] %= 10;
}
//如果最后有进位
if (c[lc + 1] > 0)
lc++;
//打印结果
for (int i = lc; i >= 1; i--)
cout << c[i];
return 0;
}
代码二:
#include<iostream>
using namespace std;
#include<vector>
vector <int> add(vector <int>& A, vector <int >& B)
{
vector <int >C;
if (A.size() < B.size())return add(B, A);
int t = 0;
for (int i = 0; i < A.size(); i++)
{
t += A[i];
if (i < B.size())t += B[i];
C.push_back(t % 10);
t /= 10;
}
if (t)C.push_back(1);
return C;
}
int main()
{
string x, y;
cin >> x >> y;
vector<int>A,B;
for (int i = x.size() - 1; i >= 0;i--)A.push_back(x[i] - '0');
for (int i = y.size() - 1; i >= 0; i--)B.push_back(y[i] - '0');
auto C = add(A, B);
for (int i = C.size() - 1; i >= 0; i--)
{
cout << C[i];
}
return 0;
}