1023. 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-9出现的次数和所给的数1-9出现的次数一不一样。#include<iostream> #include<cstring> #include<algorithm> #include<cstdio> using namespace std; int main() { int a[10]={0},b[10]={0},i,jinwei,n,flag=0,sum; char c[50],d[50]; cin>>c; n=strlen(c); for(i=0;i<n;i++) { a[c[i]-'0']++;//计算1-9数字出现的次数 } jinwei=0; for(i=n-1;i>=0;i--) { sum=(c[i]-'0')*2+jinwei; if(sum>=10)//要进位了 { d[i]=sum-10+'0'; jinwei=1; } else { d[i]=sum+'0'; jinwei=0; } } if(jinwei==1) { b[1]++; }//表示最高位还有一个1 for(i=0;i<strlen(c);i++) { b[d[i]-'0']++; }//统计那个数2倍的1-9出现的次数 for(i=0;i<=9;i++) { if(a[i]!=b[i]) { flag=1;//1-9当中有数字出现的哦次数不一样了 break; } } if(flag) printf("No\n"); else printf("Yes\n"); if(jinwei==1) printf("1"); for(int i=0;i<n;i++) { printf("%d",d[i]); } return 0; }