#include <iostream>
#include <vector>
using namespace std;
const int N=1e6+10;//定义常变量方便改范围
bool cmp(vector<int> &A,vector<int> &B)//比较A和B大小,若A>=B则返回true
{
if(A.size()!=B.size())
{
return A.size()>B.size();//若长度不同,则谁长谁的值就更大
}
for(int i=A.size()-1;i>=0;i--)
{
if(A[i]!=B[i])
{
return A[i]>B[i];//若长度相同,则逐位比较
}
}
return true;//若都相同,也返回true
}
vector<int> sub(vector<int> &A,vector<int> &B)//高精度减算法模板
{
vector<int> C;//定义C用于返回sub的结果
int t=0;//存放进位
for(int i=0;i<A.size();i++)//A运算完了才结束
{
t=A[i]-t;//先让A[i]减去进位的数,结果存回给t
if(i<B.size()) t-=B[i];//再在B的长度范围内,减去B[i],存回t
C.push_back((t+10)%10);//临时存放当前运算位结果的绝对值
if(t<0) t=1;//要是当前运算结果是负数,表示要借1位,所以t更新为1
else t=0;//否则没进位,t更新为0
}
while(C.size()>1&&C.back()==0) C.pop_back();//删除多余的0
return C;//返回sub的结果
}
int main()//调用算法模板测试
{
string a,b;//用于输入两个大数
vector<int> A,B;//用于存放两个大数
cin>>a>>b;//输入两个大数
for(int i=a.size()-1;i>=0;i--)
{
A.push_back(a[i]-'0');//倒序存放大数
}
for(int i=b.size()-1;i>=0;i--)
{
B.push_back(b[i]-'0');//倒序存放大数
}
if(cmp(A,B))//比较A和B的大小 ,要是A>=B就执行A-B
{
vector<int> C=sub(A,B);
for(int i=C.size()-1;i>=0;i--)
{
printf("%d",C[i]);
}
}
else//要是A<B就执行-(A-B)
{
vector<int> C=sub(B,A);
printf("-");
for(int i=C.size()-1;i>=0;i--)
{
printf("%d",C[i]);
}
}
return 0;
}
04-15
1953
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
11-04
1514
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
03-15
11-28
61
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)