不会高精加的先看这个
#include<bits/stdc++.h>
using namespace std;
string aa,bb;
string addfunc(string a,string b)//高精度加法
{
string sum;
int arr[50000]={0},brr[50000]={0},crr[50001]={0};
for(int i=a.size();i>0;--i)
arr[i]=a[a.size()-i]-'0';
for(int i=b.size();i>0;--i)
brr[i]=b[b.size()-i]-'0';
int maxl=max(a.size(),b.size());
for(int i=1;i<=maxl;++i)
{
crr[i]+=arr[i]+brr[i];
if(crr[i]>9)
{
crr[i+1]+=1;
crr[i]%=10;
}
}
if(crr[maxl+1]!=0)
{
sum+='1';
}
for(int i=maxl;i>0;--i)
{
sum+=crr[i]+'0';
}
return sum;
}
string tsubfunc(string a,string b)//高精度减法
{
if((b>a&&a.size()==b.size())||(b.size()>a.size()))
swap(a,b);
string sum;
int arr[50000]={0},brr[50000]={0},crr[50001]={0};
for(int i=a.size();i>0;--i)
arr[i]=a[a.size()-i]-'0';
for(int i=b.size();i>0;--i)
brr[i]=b[b.size()-i]-'0';
int maxl=max(a.size(),b.size());
for(int i=1;i<=maxl;++i)
{
if(arr[i]<brr[i])
{
arr[i+1]-=1;
arr[i]+=10;
}
crr[i]=arr[i]-brr[i];
}
int x;
for(int i=maxl;i>0;--i)
{
if(crr[i]!=0)
{
x=i;
break;
}
}
for(int i=x;i>0;--i)
{
sum+=crr[i]+'0';
}
return sum;
}
string subfunc(string a,string b)
{
if(a==b)//分类讨论
return "0";
string sum;
if(((b>a&&a.size()==b.size())||(b.size()>a.size()))&&(a[0]!='-'&&b[0]!='-'))//判断得数正负
{
sum=tsubfunc(a,b);
return '-'+sum;
}
if(((a>b&&a.size()==b.size())||(a.size()>b.size()))&&(a[0]!='-'&&b[0]!='-'))
{
sum=tsubfunc(a,b);
return sum;
}
if(((b>a&&a.size()==b.size())||(b.size()>a.size()))&&(a[0]=='-'&&b[0]=='-'))
{
sum=tsubfunc(a,b);
return sum;
}
if(((a>b&&a.size()==b.size())||(a.size()>b.size()))&&(a[0]=='-'&&b[0]=='-'))
{
sum=tsubfunc(a,b);
return '-'+sum;
}
if(a[0]=='-'&&b[0]!='-')//一正一负转加法
{
a.erase(0,1);
sum=addfunc(a,b);
return '-'+sum;
}
if(a[0]!='-'&&b[0]=='-')
{
b.erase(0,1);
sum=addfunc(a,b);
return sum;
}
}
int main()
{
cin>>aa>>bb;
string c=subfunc(aa,bb);
cout<<c;
return 0;
}
不多说,相信能看懂。