00-自测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 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:1234567899Sample Output:
Yes 2469135798
1 #include <cstdio> 2 #include <cstring> 3 #include <string> 4 #include <queue> 5 #include <cmath> 6 #include <iostream> 7 using namespace std; 8 int ti[10],num1[25],num2[25]; 9 char num[25]; 10 int main(){ 11 //freopen("D:\\INPUT.txt","r",stdin); 12 scanf("%s",num); 13 14 //cout<<num<<endl; 15 16 int i; 17 for(i=0;i<strlen(num);i++){ 18 num1[i]=num[i]-'0'; 19 ti[num1[i]]++; 20 num2[i]=2*num1[i]; 21 } 22 int k=0,t; 23 for(i=strlen(num)-1;i>=0;i--){ 24 t=num2[i]+k; 25 num2[i]=t%10; 26 ti[num2[i]]--; 27 k=t/10; 28 } 29 bool can=false; 30 if(!k){ 31 for(i=0;i<=9;i++){ 32 if(ti[i]){ 33 break; 34 } 35 } 36 if(i==10){ 37 can=true; 38 } 39 } 40 if(can){ 41 printf("Yes\n"); 42 } 43 else{ 44 printf("No\n"); 45 } 46 if(k){ 47 printf("%d",k); 48 } 49 for(i=0;i<strlen(num);i++){ 50 printf("%d",num2[i]); 51 } 52 printf("\n"); 53 return 0; 54 }