1023. Have Fun with Numbers (20)

来源:互联网 发布:七星彩规律软件 编辑:程序博客网 时间:2024/06/02 07:00

1023. Have Fun with Numbers (20)

时间限制
400 ms
内存限制
65536 kB
代码长度限制
16000 B
判题程序
Standard
作者
CHEN, Yue

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:
Yes2469135798

提交代码


直接记录比较两个字符串中每个字符出现的次数就可以了#include<iostream>#include<string>#include<cstring>#include<cstdio>using namespace std;char str[30];char str1[30];int book[10] ={0};int book1[10] ={0};int main(){//  freopen("input.txt","r",stdin);  scanf("%s",str);  int a;  int jin = 0;   int len = strlen(str);  for(int i = 0;i<len;i++){    book[str[i]-'0']++;  }  for(int i = len-1;i >= 0;i--){    a = (str[i]-'0')*2+jin;    jin = a/10;    str1[i] = a%10+'0';  }  int flag = 1;  if(jin != 0){        printf("No\n");    printf("1");    printf("%s\n",str1);  } else{    for(int i = 0;i< len;i++){      book1[str1[i]-'0']++;    }    for(int i = 0;i < 10;i++){      if(book1[i] != book[i]){        flag = 0;      }    }    if(flag == 0){      printf("No\n");      printf("%s\n",str1);    }else{      printf("Yes\n");      printf("%s\n",str1);    }  }  return 0;}