INPUT :任意两个大数
OUTPUT :输出两个大数的相减的结果(结果可以为负)
之前用char类字符串做每位的转换比较麻烦 但是改为string型做大数减法比较简单
代码如下:
#include <iostream>
#include <cstring>
using namespace std;
string a,b;
string substr(string a,string b )
{
int i,j,k,flag=1;
string s1,s2;
if(a.size()<b.size()||a.size()==b.size()&&a.compare(b)<0)
{
//a的长度小于b的长度 或者 a的长度等于b的长度 a小于b
s1=a;
a=b;
b=s1;
flag=0;
}
//始 终 令 a 的 长 度 大 于 b 的长度
while (a.length()-1>b.length()-1) b='0'+b; //字符短的加前导零,使他们一样长
for (i=a.length()-1; i>=1; i--) //减,规整 最高位单独处理
{
if(a[i]>=b[i])
a[i]=a[i]-b[i];
else
{
a[i]=a[i]-b[i];
a[i]=a[i]+10;
a[i-1]=a[i-1]-1;
}
}
a[0]=a[0]-b[0]; // a must more than b
for( i=0; i<a.length(); i++)
a[i]+=48;
for(i=0; i<a.length(); i++) // 去零 from high to low
if(a[i]!='0')
break;
if(i==a.length())
{
a="0";
return a;
}
for(j=i,k=0; j<a.length(); j++,k++)
s2=s2+a[j];
if(flag!=1)
{
s2='-'+s2;
}
return s2;
}
int main()
{
while(cin>>a>>b)
{
cout<<substr(a,b)<<endl;
}
return 0;
}
高精度问题要熟练 最好背过 比赛的时候能熟练的敲出来