int cmp(string a,string b)//比较a,b大小
{
if(a==b) //ab相等
return 0;
int lenA = a.length();
int lenB = b.length();
int flag;
if(lenA==lenB){
for(int i=0;i<lenA;i++)
{
if(a[i]>b[i]){
flag=1; //a大
break;
}else if(a[i]<b[i]){
flag=-1;//b大
break;
}
}
}else if(lenA>lenB){
flag=1;//a大
}else if(lenA<lenB){
flag=-1;//b大
}
return flag;
}
string subtract(string a,string b)//a-b
{
int lenA = a.length();
int lenB = b.length();
if(a==b)
return "0";
string tmp;
string ans;
int flag=cmp(a,b);//比较两个数的大小
if(flag==-1){ //如果b大,交换位置,确保a始终比b大
tmp=b;
b=a;
a=tmp;
}
reverse(a.begin(),a.end());
reverse(b.begin(),b.end());
for(int i=0;i<b.length();i++)
{
if(a[i]>=b[i])
a[i]=a[i]-b[i]+'0';
else{//借1
int k=1;
while(a[i+k]=='0'){
a[i+k]='9';
k++;
}
a[i+k]=a[i+k]-'1'+'0';
a[i]=(a[i]-'0'+10)-(b[i]-'0')+'0';
}
}
reverse(a.begin(),a.end());
if(flag==-1)
return "-"+a.substr(a.find_first_not_of('0'));
return a.substr(a.find_first_not_of('0'));
}
算法介绍:
参数:两个string型的字符串,代表传入的两个加数
返回值:string型的字符串
注意:需要用到比较两个大数的大小的函数、不允许有小数点
例:
string a="3712980480";
string b="3748124242";
cout<<subtract(a,b); //输出-35143762