题目描述 |
Notice that the number 123456789 is a 9-digit number consisting exactly the numbers from 1 to 9, with no duplication. Double it we will obtain 246913578, which happens to be another 9-digit number consisting exactly the numbers from 1 to 9, only in a different permutation. Check to see the result if we double it again!
Now you are suppose to check if there are more numbers with this property. That is, double a given number with k digits, you are to tell if the resulting number consists of only a permutation of the digits in the original number.
Input Specification:
Each input file contains one test case. Each case contains one positive integer with no more than 20 digits.
Output Specification:
For each test case, first print in a line “Yes” if doubling the input number gives a number that consists of only a permutation of the digits in the original number, or “No” if not. Then in the next line, print the doubled number.
Sample Input:
1234567899
Sample Output:
Yes
2469135798
解题思路 |
题目大意
给出一个长度不超过20的整数,问这个整数两倍后的数位是否为原数位的一个排列。不管是yes还是no最后都要输出整数乘以2的结果
思路
将这一串数字以字符形式存储至数组中,进行倍数操作时,注意最高位即可
代码设计 |
[任务] 将一串数字乘以2,并判断是否可由原先数字重新排列得出
[接口]
bool doubler(char ss[],char* re,int& ans)
输入:ss 一串数字 re 存放乘以2后的结果(如果数字长度超过ss的长度,将最高位放置ans中) ans 存放re的最高位
//代码实现
//zhicheng
bool doubler(char ss[],char* re,int& ans)
{
int book1[10]={0},book2[10]={0};
int len=strlen(ss);
re[len]='\0';
for(int i=len-1;i>=0;i--)
{
ans+=(ss[i]-'0')*2;
re[i]=ans%10+'0';
ans/=10;
book1[ss[i]-'0']++;
book2[re[i]-'0']++;
}
if(ans)book2[ans]++;
for(int i=0;i<10;i++)if(book1[i]!=book2[i])return false;
return true;
}
有关PAT (Basic Level) 的更多内容可以关注 ——> PAT-B题解
有关PAT (Advanced Level) 的更多内容可以关注 ——> PAT-A题解