|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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
请按任意键继续 。。。
|
|