大数减法
问题描述:
给你两个大数,输出,他们的差
输入:
输入n,有n组数,接下输入两个数
输出:
输出他们的差
输入样例:
3
88 5
2 999999999999
456786798787 4564564857921456645789789
输出样列:
83
-999999999997
-4564564857920999858991002
代码:
#include<iostream>
using namespace std;
string a,b;
string substr(string a,string b )
{
int i,j,k,c,s,flag=1;
string s1,s2;
if(a.size()<b.size()||a.size()==b.size()&&a.compare(b)<0)
{
s1=a;
a=b;
b=s1;
flag=0;
}
while (a.length()-1>b.length()-1) b='0'+b; //字符短的加前导零,使他们一样长
for (i=a.length()-1; i>=0; i--) //减,规整
{
if(a[i]>=b[i])
a[i]=a[i]-b[i];
else
{
a[i]=a[i]-b[i];
c=(a[i]*(-1)/10)+1;
a[i]=a[i]+c*10;
a[i-1]=a[i-1]-c;
}
}
for(i=0;i<a.length();i++) // 去零
if(a[i]=='0');
else break;
for(j=i,k=0;j<a.length();j++,k++) //转化字符
a[k]=a[j]+48;
if(flag)
{
s2=a;
}
else
{
s2="-";
s2+=a;
}
return s2;
}
int main()
{ int cas;
cin>>cas;
while(cas--)
{
cin>>a;
cin>>b ;
cout<<substr(a,b)<<endl;
}
return 0;
}