密码(password)

题目描述

人们在做一个破译密码游戏:有两支密码棒分别是红色和蓝色,把红色密码棒上的数字减去蓝色密码棒上的数字,就是开启密码锁的密码。现已知密码棒上的数字位数不超过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;
		}
		else
			v=0;			
	}
	c[cc]-=v;
	while(c[cc]==0&&cc>1)
		cc--;
	for(int i=cc;i>=1;i--)
		cout<<c[i];
	return 0;
}

猜你喜欢

转载自blog.csdn.net/m0_52628784/article/details/113073093