题目大意:
对于题面中给的例子 17236 + 03465 = 1106911
/*
17236 + 03465 = 1106911
1 7 2 3 6
+0 3 4 6 5
-----------
1 10 6 9 11
*/
两个数中每一位直接相加,结果直接写在相应位置
假设A = 17236, B = 3456, C = 1106911, 题目会给A和C,求B的值或输出-1当B无法计算时
看到大部分题解都在用字符串,但是这道题的数据范围是,S只有
而且S-A一定小于S,因此可以用64位无符号整数做运算。
关于-1的处理:
可以发现结果是由A和B的一位相加得到,那么,当用C的一位减A的一位不够,用C的两位减A的一位超过9时,可以认为无法算出一个一位的结果作为B的一位,那么此时为-1
代码:
#include <iostream>
#define QWORD unsigned long long
int main()
{
int T;
std::cin >> T;
while (T--)
{
QWORD A, S;
std::cin >> A >> S;
QWORD ans = 0;
QWORD zero = 1;
int flag = 1;
while (S || A)
{
int sx = (int)(S % 10);
int ax = (int)(A % 10);
S /= 10;
A /= 10;
if (sx < ax)
{
sx += (int)(10 * (S % 10));
S /= 10;
}
int c = sx - ax;
if (c > 9 || c < 0)
{
flag = 0;
break;
}
ans += zero * c;
zero *= 10;
}
flag ? std::cout << ans << std::endl : std::cout << -1 << std::endl;
}
return 0;
}