题目描述
人们在做一个破译密码游戏:有两支密码棒分别是红色和蓝色,把红色密码棒上的数字减去蓝色 密码棒上的数字,就是开启密码锁的密码。现已知密码棒上的数字位数不超过20000位,请在一秒内求出密码。
输入格式
2行,每行有一个正整数。
输出格式
一个正整数,为输入的两个正整数中较大者减去较小者的差值。
样例输入content_copy
135477
67122
样例输出content_copy
68355
提示/说明
30%的数据,两个数均小于2×109;
70%的数据,第一个数大于第二个数;
50%的数据,两个数均小于l×1016;
100%的数据,两个数均小于1×1020000。
#define _CRT_SECURE_NO_WARNINGS 1
#include<bits/stdc++.h>
using namespace std;
string a, b, c;
int w, l[200000];
int ans;
int main()
{
cin >> a >> b;
if (a.size() > b.size()) {
w = b.size();
ans = 1;
while (w < a.size()) {
b = '0' + b;
w++;
}
}else {
if (b.size() > a.size()) {
w = a.size();
ans = 2;
while (w < b.size()) {
a = '0' + a;
w++;
}
}else {
if (a > b) {
ans = 1;
}else {
if (b > a) {
ans = 2;
}else {
cout << 0;
return 0;
}
}
}
}
for (int j = a.size() - 1, k=1; j >= 0; j--, k++) {
if (ans == 1) {
if (a[j] >= b[j]) {
l[k] = int(a[j] - b[j]);
}
else {
a[j - 1] = a[j - 1] - 1;
l[k] = int((10 + a[j]) - b[j]);
}
}
else {
if (b[j] >= a[j]) {
l[k] = int(b[j] - a[j]);
}
else {
b[j - 1] = b[j - 1] - 1;
l[k] = int((10 + b[j]) - a[j]);
}
}
}
int y = a.size();
while (l[y] == 0) {
y--;
}
for (int j = y; j >= 1; j--) {
cout << l[j];
}
return 0;
}