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:
Yes2469135798
分析:给你一个20位以内的数,double之后看它1~9的个数是不是和原来一样,虽然是用数来表示,但是是考察字符串操作
#include <stdio.h> #include <math.h> #include <vector> #include <string.h> #include <iostream> #include <algorithm> using namespace std; int num1[10]={0}; int num2[10]={0}; int str2[44]; int change(char s[]) { int k,n=0,yushu; int leng=strlen(s); int i=leng-1; for(;i>=0;i--) { k=s[i]-'0'; int num=k*2+n; num1[k]++; if(num>=10) { yushu=num/10; num=num%10; n=1; } else{ n=0; yushu=0; } str2[i]=num; num2[num]++; } return yushu; } int main() { int k; char str1[44]; //char str2[44]; cin>>str1; k=strlen(str1); int zuihou=change(str1); int flag=1; for(int i=0;i<10;i++) { if(num1[i]!=num2[i]) { flag=0;break; } } if(flag) printf("Yes\n"); else printf("No\n"); if(zuihou){ printf("%d",zuihou); for(int i=0;i<k;i++) { printf("%d",str2[i]); } } else for(int i=0;i<k;i++) printf("%d",str2[i]); return 0; }