题目
小 B 给你两个整数,请你求出两个数当中的公有数字。
公有数字是指某个数字在两个整数中都出现过。
只要你的程序在 1s内找到结果,他就可以用这些数字给你变个魔术看。
输入格式
一行两个整数。
输出格式
一行几个数字,表示公有的数字,数字间用空格隔开。
输出需按照数字大小由小到大输出。
如果不存在,则输出 -1。
数据范围
设两个数字中较大的为 n
:
对于 50%的数据,0≤n≤10^9。
对于 80% 的数据,0≤n≤1018。
对于 90% 的数据,0≤n≤10(104)。
对于 100% 的数据,0≤n≤10(106)。
#include<iostream>
using namespace std;
int main(){
string a,b;
//数字太大时可以通过字符串形式读入
cin>>a;
cin>>b;
long long int l1=a.length(),l2=b.length();
//计算出字符串长度,注意数据范围
long long int a1[100]={0},b1[100]={0};
//分别记录两个字符串中0-9出现次数
int t=0;
for(long long int i=0;i<l1;i++){
a1[(a[i]-'0')]++;
//记录第一个读入字符串a中0-9每个数字出现次数
}
for(long long int i=0;i<l2;i++){
b1[(b[i]-'0')]++;
//记录后一个读入字符串b中0-9每个数字出现次数
}
for(int i=0;i<10;i++){
if(a1[i]>0&&b1[i]>0){
//判断两个字符串中是否有都出现的字符(0-9)
if(t>0){//用于控制输出空格
printf(" ");
}
printf("%d",i);
t++;
}
if(i==9&&t==0){
//如果两个字符串没有相同的字符
printf("-1\n");
}
}
return 0;
}