Question: 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
结尾无空行
代码
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include <string.h>
int judge(int arr1[],int arr2[],int x)
{
for (int i = 0; i < x; i++)
{
if (arr1[i] != 0 && arr2[0] != 0)
{
return 0;
}
}
return 1;
}
int main()
{
char temp1[22];
scanf("%s", temp1);
int sz = strlen(temp1);
int a[50] = { 0 };
int b[51] = { 0 };
int dit[10] = { 0,0,0,0,0,0,0,0,0,0 };
for (int i = 0; i < sz; i++)
{
a[i] = temp1[i] - '0';
dit[a[i]]++;
}
int carry_bit = 0;
for (int i = sz - 1; i >= 0; i--)
{
b[i+1] =carry_bit;
int amass= a[i] * 2 ;
if (amass >=10)
{
b[i+1] = amass % 10+b[i+1];
carry_bit = (amass -b[i+1]+ carry_bit)/10;
if (b[i+1] >= 10)
{
carry_bit++;
b[i+1] = b[i+1] - 10;
}
}
else
{
b[i+1] = amass+b[i+1];
carry_bit = 0;
}
}
b[0] = carry_bit;
for (int i = 0; i < sz; i++)
{
dit[b[i+1]]--;
}
if (judge(dit,b,sz)== 0)
{
printf("No\n");
for (int i = 0; i < sz + 1; i++)
{
printf("%d", b[i]);
}
}
else
{
printf("Yes\n");
for (int i = 1; i < sz + 1; i++)
{
printf("%d", b[i]);
}
}
return 0;
}
|