数字碰撞

来源:互联网 发布:firefly ubuntu 编辑:程序博客网 时间:2024/05/23 01:57

时间限制:1s;内存限制:256MB

【问题描述】
小 Y 发明了一个新型数字运算规则:数字碰撞,运算规则如下:
1.参不运算的两个数位数必须相同
2.将两个整数的每一位迚行比较,较小的那个数字会被撞碎,较大的数字保留下来(如果两数相同,都会保留)
例如下面例子中:
两个整数 13570 和 21673 碰撞后,对应数位上较小的值已经消失,碰撞的结果为:第一个数字剩下 37,第二个数字剩下 2673。
现在小 Y 想让你写一个程序来实现数字碰撞这一运算

【输入文件】
第一行一个整数 x,表示输入的第一个整数
第二行一个整数 y,表示输入的第二个整数

【输出文件】
输出包含两行,第一个表示 x 碰撞后的结果
第二行表示 y 碰撞后的结果
若 x 或者 y 所有数位上的数字都消失了,该行输出“BOOM”注意都是大写的

【样例输入 1】
13570
21673
【样例输出 1】
37
2673
【样例 1 解释】
参考题目描述

【样例输入 2】
300
500
【样例输出 2】
0
500
【样例 2 解释】
300 第一位被撞碎了,剩下 00,因为不能包含前导 0,输出 0。500 没有任何一位被撞碎

【样例输入 3】
1234
5678
【样例输出 3】
BOOM
5678
【样例 3 解释】
1234 每一位都被撞碎了,输出“BOOM”,5678 没有任何一位被撞碎

【数据范围】
对于 50%的数据,0<=x,y<10^9
对于 80%的数据,0<=x,y<10^100 ,即 x,y 的长度不超过 100
对于 100%的数据,0<=x,y<=10^1000 ,即 x,y 的长度不超过 1000
保证所有 x 和 y的位数相同,且 x,y 本身没有多余的前导 0

#include<iostream>#include<cstring>#include<algorithm>#include<cstdio>#include<cmath>#include<queue>#include<vector>#include<climits>#include<string>#include<cstdlib>#include<ctime>#include<map>#define LL long long#define MOD 1000000007using namespace std;char x[1005],y[1005];int len,i,fx,fy,xx,yy;int main(){    freopen("number.in","r",stdin);    freopen("number.out","w",stdout);           scanf("%s",x);    scanf("%s",y);    len=strlen(x);    for(i=0;i<len;i++)    {        if(x[i]<y[i]) x[i]='*';        if(y[i]<x[i]) y[i]='*';    }    for(i=0;i<len;i++)        if(x[i]!='*')        {            if(fx==0&&x[i]=='0') fx=1;            else            {                fx=1;                xx=1;                printf("%c",x[i]);            }        }    if(fx==0) printf("BOOM");    else if(xx==0) printf("0");    printf("\n");    for(i=0;i<len;i++)        if(y[i]!='*')        {            if(fy==0&&y[i]=='0') fy=1;            else            {                fy=1;                yy=1;                printf("%c",y[i]);            }        }    if(fy==0) printf("BOOM");    else if(yy==0) printf("0");    return 0;}