1023 Have Fun with Numbers (20)(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:
1234567899
Sample Output:
Yes
2469135798
判断数字乘2后是否还是原来的数字(仅交换顺序) 。注意20位超出long long范围。
#include<stdio.h>
#include<string.h>
int main(){
char n[22]={0},n2[22]={0};
bool visited[22]={0};
scanf("%s",n);
int len=strlen(n);
int carry=0;//进位
for(int i=len-1;i>=0;i--){
int t=n[i]-'0';
int tmp=t*2+carry;
carry=tmp>9?1:0;
int t2=tmp-(carry?10:0);
n2[i]=t2+'0';
}
if(carry){//多一位
printf("No\n1%s",n2);
return 0;
}
int num=0;
for(int i=0;i<len;i++){
for(int j=0;j<len;j++){
if(n2[j]==n[i]&&!visited[j]){
visited[j]=true;
num++;
break;
}
}
}
if(num==len)
printf("Yes\n");
else
printf("No\n");
printf("%s",n2);
return 0;
}