高精度与高精度的减法其实不适合用string实现,因为涉及到多位的借位的时候就非常的不方便,不如直接用vector承接以下string的内容然后便于借位的实现。
不管是高精度加法还是减法都需要 以最长的那的数的位数来为 for 的标准不够的那个数高位补0
最后再判断并消除是否具有前导零。
肯定得是大数-小数
#include<iostream>
#include<cstdio>
#include<string>
#include<algorithm>
#include<vector>
using namespace std;
const int maxn=10010;
typedef long long LL;
string sub(string a,string b){
LL len = max( a.length() , b.length() );
vector<int> v1(len,0),v2(len,0);
for(int i=0;i<a.length();i++)
v1[i]=( (a[i]-'0') );
for(int i=0;i<b.length();i++)
v2[i]=( (b[i]-'0') );
string ans="";
for(int i=0;i<len;i++){
int t=v1[i]-v2[i];
if(t<0) {
v1[i+1]--;
t=t+10;
}
char c=t+'0';
ans=c+ans;
}
//097
int i;
string res="";
for(i=0;i<ans.size();i++)
if(ans[i]!='0') break;
if(i==ans.size()) res="0";
else{
for(;i<ans.length();i++)
res=res+ans[i];
reverse(res.begin(),res.end());
}
return res;
}
void print(string c){
for(int i=c.length()-1;i>=0;i--)
cout<<c[i];
}
int main(){
string a="101",b="7";
print(sub(a,b));
return 0;
}