您的位置:首页 > 其它

PAT 1023. Have Fun with Numbers (20)

2015-07-06 15:52 344 查看
题目说明:输入一个数,如果这个数翻倍之后和原数每一位的数字一样,只是排序不同,则输出Yes,否则输出No。

思路:原数最多20位,不能直接乘以2,需要按位去计算。用两个数组分别存放原数和2倍数每个数字的出现次数,最后对比得到结果。

代码:

#include<iostream>
#include<fstream>
#include<string.h>
using namespace std;

char ori[25];
char res[25];
int countori[10];
int countres[10];

int main(){
cin>>ori;

int c=0,s;
//计算翻倍后的结果
for(int i=strlen(ori)-1;i>=0;i--){
s=(ori[i]-'0')*2;
res[i]=s%10+c+'0';
c=s/10;
}
//如果位数变多,不符合
if(c==1){
cout<<"No"<<endl;
cout<<'1'<<res<<endl;
return 0;
}
//计算每个数字的出现次数
for(int i=0;i<strlen(ori);i++){
countori[ori[i]-'0']++;
countres[res[i]-'0']++;
}
//比较翻倍前后是否相同
bool flag=true;
for(int i=0;i<10;i++){
if(countori[i]!=countres[i]){
flag=false;
break;
}
}

if(flag)
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
cout<<res<<endl;

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: