题目描述
求a-b的值
输入
第一行一个整数T,表示接下来有T行
每行两个整数是a,b,(0<=a,b<=10^10000)
输出
输出值
样例输入
2
100 98
100000000000000000000 1
样例输出
2
99999999999999999999
刷波大数压压惊 ヽ(✿゚▽゚)ノ
代码:
#include<bits/stdc++.h>
using namespace std;
#define maxn 100005
string a,b;
int t;
int s1[maxn],s2[maxn];
int main(){
while(cin>>t){
while(t--){
memset(s1,0,sizeof(s1));
memset(s2,0,sizeof(s2));
cin>>a>>b;
int n1=a.size();
int n2=b.size();
for(int i=0;i<n1;i++){
s1[i]=a[n1-i-1]-'0';
}
for(int i=0;i<n2;i++){
s2[i]=b[n2-i-1]-'0';
}
if(a==b)cout<<"0\n";
else{
int p=1;
if(n1<n2)p=0;
if(n1==n2){
if(a<b)p=0;
}
if(p){
for(int i=0;i<n1;i++){
int w=s1[i]-s2[i];
if(w<0){
s1[i+1]-=1;
s1[i]=10+w;
}
else s1[i]=w;
}
int e=n1;
for(e;e>=0;e--)if(s1[e])break;
for(e;e>=0;e--)printf("%d",s1[e]);
}
else{
printf("-");
for(int i=0;i<n2;i++){
int w=s2[i]-s1[i];
if(w<0){
s2[i+1]-=1;
s2[i]=10+w;
}
else s2[i]=w;
}
int e=n2;
for(e;e>=0;e--)if(s2[e])break;
for(e;e>=0;e--)printf("%d",s2[e]);
}
printf("\n");
}
}
}
}