题目描述
高精度加法,相当于a+b problem,不用考虑负数.
输入格式
分两行输入。a,b≤10500a,b \leq 10^{500}a,b≤10500
输出格式
输出只有一行,代表a+ba+ba+b的值
输入输出样例
输入 #1
1
1
输出 #1
2
输入 #2
1001
9099
输出 #2
10100
思路
这道题是典型的大数加法问题。解决大数问题的关键就在于字符串(数组)处理。
代码
#include<bits/stdc++.h>
using namespace std;
string a;int len_a;int a_sz[510];//输入的加数字符串a;加数字符串的长度len_a;加数各位倒序存储的整形数组a[];
string b;int len_b;int b_sz[510];//输入的加数字符串b;加数字符串的长度len_b;加数各位倒序存储的整形数组b[];
int main()
{
//输入
cin>>a;cin>>b;
//特判
if (a == "0" && b == "0") {
cout<<"0"<<endl;
return 0;
}
//倒序存入
len_a = a.length(); len_b = b.length();
int t = 0;
for (int i = len_a-1; i >= 0; i--) { //倒序存入数组a
a_sz[t++] = a[i] - '0';
}
t = 0;
for (int i = len_b - 1; i >= 0; i--) { //倒序存入数组b
b_sz[t++] = b[i] - '0';
}
//相加
int len_max = max(len_a, len_b);
for (int i = 0;i < len_max; i++) {
a_sz[i] = a_sz[i] + b_sz[i]; //相加
if (a_sz[i] >= 10) { //如果有进位
a_sz[i] = a_sz[i] - 10;
a_sz[i+1]++; //进位
}
}
//输出
int j;
for (int i = 505; i >= 0; i--) { //找到第一个不为零的高位
if (a_sz[i] != 0) {
j = i;
break;
}
}
for (int i = j; i >= 0; i--) { //因为存的时候是倒序,输出的时候从后往前输出
cout<<a_sz[i];
}
return 0;
}