地址:https://pta.patest.cn/pta/test/17/exam/4/question/263
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
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 <iostream>
#include <stdio.h>
using namespace std;
int main(){
int a[20]={0};
int b[20]={0};
int i = 0,j=0,n=0;
while(1){
char c;
c = cin.get();
if(c=='\n') break;
i++;
n++;
a[i] = c-'0';
b[i] = a[i];
a[i] = 2*a[i];
}
if(a[n]>9) {
a[n] = a[n]-10;
a[n-1]++;
}
for(i=n-1;i>=1;i--){
if(a[i]>9){
a[i] = a[i]-10;
a[i-1]++;
}
}
if(a[0]>0) {
cout <<"No"<<endl;
for(i=0;i<=n;i++){
cout << a[i];
}
}
else
{
int flag = 1;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++){
if(b[i]==a[j]) {b[i]=-1; break;}
}
for(i=1;i<n;i++){
if(b[i]!=-1) flag = 0;
}
if(flag) {
cout <<"Yes"<<endl;
for(i=1;i<=n;i++){
cout << a[i];
}
}
else if(!flag)
{
cout <<"No"<<endl;
for(i=1;i<=n;i++){
cout << a[i];
}
}
}
return 0;
}