| 
 | 
 
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
x
 
-             5 Have Fun with Numbers (20point(s)) 
 
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 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
请注意,数字123456789是一个9位数的数字,完全由1到9组成,没有重复。加倍,我们将得到246913578,它恰好是另一个9位数的数字,正好包含从1到9的数字,只是在不同的排列。如果我们再加倍看看结果! 
现在,假设您要检查是否有更多具有此属性的数字。也就是说,用k个数字将一个给定的数字加倍,你要知道结果数字是否只由原始数字中的数字排列组成。 
输入规格: 
每个输入包含一个测试用例。每个案例包含一个不超过20位的正整数。 
输出规格: 
对于每个测试用例,如果将输入的数字加倍,则首先在一行中打印“Yes”,如果输入的数字仅由原始数字中的数字排列组成,则首先打印一行“No”。然后在下一行中,打印加倍的数字。
 - #include<stdio.h>
 
 - #include<string.h>
 
 - int digit[10]; //静态初始化数组,默认值为0 
 
 - int main()
 
 - {
 
 -         char ch[21];  //20个以内的数字(10位的数已经不是int了,用字符比较方便一点) 
 
 -         scanf("%s", ch);
 
 -         int len = strlen(ch), num, i, flag = 0;
 
 -         for (i = len - 1; i >= 0; i--)
 
 -         {
 
 -                 num = ch[i] - '0'; //char 转 int 
 
 -                 digit[num]++;
 
 -                 num = num * 2 + flag; //flag是进制,x2后,进制可能会加一 
 
 -                 flag = 0;
 
 -                 if (num >= 10)
 
 -                 {
 
 -                         num -= 10;
 
 -                         flag = 1;
 
 -                 }
 
 -                 ch[i] = (num + '0'); //int 转 char 
 
 -                 digit[num]--;
 
 -         }
 
 -         int flag1 = 0; //优化输出
 
 -         for (i = 0; i < 10; i++)
 
 -         {
 
 -                 if (digit[i] != 0)
 
 -                 {
 
 -                         flag1 = 1;
 
 -                         break;
 
 -                 }
 
 -         }
 
 -         printf("%s", (flag1 == 1) ? "No\n" : "Yes\n");
 
 -         if (flag == 1)
 
 -                 printf("1");// 若有进位,先输出1
 
 -         printf("%s", ch);
 
 -         return 0;
 
 - }
 
  复制代码 
************************************************* 
1234567899 
Yes 
2469135798 
请按任意键继续 。。。  
 
 
 |   
 
 
 
 |