题目链接:https://www.patest.cn/contests/pat-a-practise/1023
题目大意:判断a和2*a中每一个数字的个数是否相同。
解题思路:
- 为便于统计数字的个数使用字符串保存数字a,然后计算2*a
- 再统计两者中0,1,···9的个数
- 比较两者中每个数字的个数是否相同
代码如下:
#include <iostream>
#include <string>
using namespace std;
int cntnum1[10]={0};
int cntnum2[10]={0};
int main(int argc, char const *argv[])
{
string a,b;
cin>>a;
b=a;//b用来保存a*2
int tmp=0;
for(int i=a.length()-1;i>=0;i--){//该循环用来计算a*2
cntnum1[a[i]-'0']++;
b[i]=((a[i]-'0')*2+tmp)%10+'0';
if(((a[i]-'0')*2+tmp)<10)
tmp=0;
else
tmp=1;
}
if(tmp==1)
b='1'+b;
for(int i=0;i<b.length();i++)
cntnum2[b[i]-'0']++;
for(int i=0;i<10;i++){
if(cntnum1[i]!=cntnum2[i]){//判断2*a中每个数字的个数与a的是否相同
cout<<"No"<<endl<<b<<endl;
return 0;
}
}
cout<<"Yes"<<endl<<b<<endl;
return 0;
}