题目描述
人们在做一个破译密码游戏:有两支密码棒分别是红色和蓝色,把红色密码棒上的数字减去蓝色密码棒上的数字,就是开启密码锁的密码。现已知密码棒上的数字位数不超过20000位,请在一秒内求出密码。
输入
2行,每行有一个正整数。
输出
一个正整数,为输入的两个正整数中较大者减去较小者的差值。
样例输入 Copy
135477
67122
样例输出 Copy
68355
提示
【输入输出样例】
输入
输出
样例1
135477
67122
68355
样例2
67122
135477
68355
【数据规模】
30%的数据,两个数均小于2×l09;70%的数据,第一个数大于第二个数;
50%的数据,两个数均小于1×l016;100%的数据,两个数均小于1×10200000
#include<bits/stdc++.h>
using namespace std;
char za[200001],zb[200001];
int a[300000],b[300000],ac,bc,c[300000],cc,v;
void h()
{swap(za,zb);ac=strlen(za);bc=strlen(zb);
}
int main()
{cin>>za>>zb;ac=strlen(za);bc=strlen(zb);if(ac<bc||ac==bc&&strcmp(za,zb)<0){h();}for(int i=0;i<ac;i++)a[ac-i]=za[i]-48;for(int i=0;i<bc;i++)b[bc-i]=zb[i]-48;cc=ac;for(int i=1;i<=cc;i++){c[i]=a[i]-b[i]-v;if(c[i]<0){c[i]+=10;v=1;}elsev=0; }c[cc]-=v;while(c[cc]==0&&cc>1)cc--;for(int i=cc;i>=1;i--)cout<<c[i];return 0;
}