自测-4 Have Fun with Numbers (20 分)
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
#include<stdio.h>
#include<string.h>
int main()
{
char str[22];
int a[20], b[20],temp[20];
int i,len;
scanf("%s", str);/以字符串代替数组输入,可以一次性输入所有数字,相当于输入了一个整数
len = strlen(str);
for (i = 0; i < len; i++)
{
a[i] = str[i] - '0';再赋给数组a;
}
for (i = 0; i < 20; i++)/初始化数组b
b[i] = 0;
for (i = 0; i < len; i++)/将数组a中代表的整数乘以2赋给数组b
{ if(i==0)
b[len - i-1] = a[len - i-1] * 2 % 10;
else if (i==len-1)
{
if (a[len - i] * 2 >= 10)
b[len - i - 1] = a[len - i - 1] * 2 + 1;
else
b[len - i - 1] = a[len - i - 1] * 2;
}
else
{
if (a[len - i] * 2 >= 10)
b[len - i - 1] = a[len - i - 1] * 2 % 10 + 1;
else
b[len - i - 1] = a[len - i - 1] * 2 % 10;
}
}
for (i = 0; i < len; i++)///将数组b代表的整数赋给数组temp
{
temp[i] = b[i];
}
for (int i = 0; i < len; i++)//将数组a,b分别排序
{
for (int j = i; j < len; j++)
{
if (a[i] < a[j])
{
int t;
t = a[i];
a[i] = a[j];
a[j] = t;
}
if (b[i] < b[j])
{
int t;
t = b[i];
b[i] = b[j];
b[j] = t;
}
}
}
for (i = 0; i < len; i++)如果排序过后数组a等于数组b则则证明yes否则就是no
{
if (a[i] != b[i])break;
}
if (i >= len)printf("yes\n");
else printf("no\n");
for (i = 0; i < len; i++)
{
printf("%d", temp[i]);
}
return 0;
}入代码片