题目描述
高精度加法,相当于 a+b problem,不用考虑负数。
输入格式
分两行输入。a,b≤10500。
输出格式
输出只有一行,代表 a+b 的值。
输入输出样例
输入 #1复制
1 1
输出 #1复制
2
输入 #2复制
1001 9099
输出 #2复制
10100
说明/提示
20% 的测试数据,0≤a,b≤;
40% 的测试数据,0≤a,b≤。
思路:
题目看起来很简单,实则也不难。
因为数据很大,所以只能用数组来存储数字,这里可以用普通数组,范围开大一点就行。
我比较推荐用vector数组,不用管数据范围,当正常数组用就行了。
#include <bits/stdc++.h>
using namespace std;
vector<int> f(vector <int>a , vector<int> b) {
vector<int>c;
int f=0;
for(int i=0;i<a.size();i++){
f+=a[i];
if(i<b.size()){
f+=b[i];
}
c.push_back(f%10);//个位数,计算这一位的数字
f/=10;
}
if(f>0){
c.push_back(f);//进位
}
return c;
}//高精度加法
int main() {
string a,b;
cin>>a>>b;
vector<int>A,B,C;
for(int i=a.length()-1;i>=0;i--){
A.push_back(a[i]-'0');//输入,将数字读入vector数组
}for(int i=b.length()-1;i>=0;i--){
B.push_back(b[i]-'0');//输入,将数字读入vector数组
}
if(a.size()>b.size()){
C=f(A,B);//调用函数
}else{
C=f(B,A);
}//进行加法完后数字位数判断
for(int i=C.size()-1;i>=0;i--){
cout<<C[i];//输出
}
}
883

被折叠的 条评论
为什么被折叠?



