思路
字符串模拟即可,从字符串 a a a后面取一个数,从字符串 s s s后面取一个个位数或两位数以保证一定大于从 a a a中取的数,从后往前遍历即可,但需要注意两点
- 当 s s s 比 a a a先遍历完时,输出-1。
- 当 s s s中取出的数减去 a a a中取出的数大于9时, b b b也不存在,输出-1。
代码
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
const int N = 20;
void solve(string a,string s){
string res;
int cnt = 0;
int p1 = a.size() - 1, p2 = s.size() - 1;
while(p2 >= 0){
int x, y = s[p2] - '0';
if(p1 >= 0) x = a[p1] - '0';
else x = 0;
if(x > y) y = y + (s[--p2] - '0') * 10;
int t = y - x;
if(t > 9 || t < 0){
cout<<-1<<endl;
return ;
}
res[cnt++] = t + '0';
p1 --;p2 --;
}
if(p1 >= 0 && p2 < 0){
cout<<-1<<endl;
return ;
}
int flag = 0;
for(int i = cnt - 1; i > 0; i --){
if(res[i] != '0') flag = 1;
if(flag == 1) cout<<res[i];
}
cout<<res[0]<<endl;
}
int main(){
int t;cin>>t;
while(t--){
string a,s;
cin>>a>>s;
solve(a,s);
}
return 0;
}