时间限制
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
#include <iostream> #include <stdio.h> #include <string.h> #include <stdlib.h> #include <algorithm> using namespace std; int main() { char str[21]; cin>>str; int a[22]={0},len,i,c=0,tmp=0; len = strlen(str); for(i=len-1;i>=0;i--) { a[i+1] = str[i]-'0'; tmp = a[i+1]*2+c; c = tmp/10; a[i+1] = tmp%10; } a[0]=c; if(c!=0) { cout<<"No\n"; for(i=0;i<=len;i++) cout<<a[i]; cout<<endl; } else { int b[21]={0}; for(i=1;i<=len;i++) b[i-1] = a[i]; sort(a,a+len+1); sort(str,str+len); bool flag = true; for(i=0;i<len;i++) { if(a[i+1]!=str[i]-'0') flag = false; } if(flag) cout<<"Yes\n"; else cout<<"No\n"; for(i=0;i<len;i++) cout<<b[i]; cout<<endl; } return 0; }