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
打表,判断是否大于0
#include <iostream> #include <string> using namespace std; int main() { string str1; int a[10]={0}; int b[10]={0}; int c[21]={0}; cin>>str1; for(int i=0;i<str1.length();i++) a[str1[i]-'0']++; int x=0,y=0,z=0; for(int i=str1.length()-1,j=0;i>=0;i--,j++) { x=2*(str1[i]-'0'); c[j]=x+y; if(c[j]>9) { c[j]-=10; y=1; } else y=0; z=j; } if(str1[0]-'5'>=0) c[z+1]=1; for(int i=20;i>=0;i--) { if(c[i]!=0) { for(int j=i;j>=0;j--) b[c[j]]++; break; } } int k=0; for(int i=0;i<10;i++) { if(a[i]!=b[i]) { k=2; break; } } if(k==0) cout<<"Yes"<<endl; else cout<<"No"<<endl; for(int i=20;i>=0;i--) { if(c[i]!=0) { for(int j=i;j>=0;j--) cout<<c[j]; break; } } cout<<endl; return 0; }