题目描述
高精度加法,相当于a+b problem,不用考虑负数.
输入格式
分两行输入。\(a,b \leq 10^{500}\)
输出格式
输出只有一行,代表\(a+b\)的值
输入 #1
1
1
输出 #1
2
输入 #2
1001
9099
输出 #2
10100
题目链接
P1601
代码#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
//C=A+B,A>=0,B>=0
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(t);
return C;
}
vector<int> A,B,C;
string a,b;
int main()
{
cin>>a>>b;
for(int i=a.size()-1;~i;i--)
A.push_back(a[i]-'0');
for(int i=b.size()-1;~i;i--)
B.push_back(b[i]-'0');
C=add(A,B);
for(int i=C.size()-1;~i;i--)
printf("%d",C[i]);
return 0;
}
高精度减法
题目描述
高精度减法。
输入格式
两个整数 \(a,b\)(第二个可能比第一个大)。
输出格式
结果(是负数要输出负号)。
输入 #1
2
1
输出 #1
1
说明/提示
- \(20\%\) 数据 \(a,b\) 在 long long 范围内;
- \(100\%\) 数据 \(0<a,b\le 10^{10086}%\)。
P2142
代码#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
//C=A-B,满足A>=B,A>=0,B>=0
vector<int> sub(vector<int> &A,vector<int> &B)
{
vector<int> C;
for(int i=0,t=0;i<A.size();i++)
{
t=A[i]-t;
if(i<B.size())t-=B[i];
C.push_back((t+10)%10);
t=t<0?1:0;
}
while(C.size()>1&&C.back()==0)C.pop_back();
return C;
}
vector<int> A,B,C;
string a,b;
int main()
{
cin>>a>>b;
if(a.size()<b.size()||(a.size()==b.size()&&a<b))putchar('-'),swap(a,b);
for(int i=a.size()-1;~i;i--)
A.push_back(a[i]-'0');
for(int i=b.size()-1;~i;i--)
B.push_back(b[i]-'0');
C=sub(A,B);
for(int i=C.size()-1;~i;i--)
printf("%d",C[i]);
return 0;
}