7-40 Have Fun with Numbers(30 分)

来源:互联网 发布:手机视频软件baidu 编辑:程序博客网 时间:2024/05/16 11:03

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 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<stdio.h>void sort(int a[],int n){    int i,j;    for(i=1;i<n;i++)    {        int temp=a[i];        for(j=i;j>0&&a[j-1]>temp;--j)            a[j]=a[j-1];        a[j]=temp;    }}int main(){char s[21];int i;int before[20]={0};int after[20]={0};//输入 for(i=0;i<20;i++){scanf("%c",&s[i]);if(s[i]=='\n') break;}//读入数组int x=i-1;for(int j=x;j>=0;j--){before[j]=(s[j]-'0');}int mid,book=0;//考虑位数不匹配的情况if(s[0]>='5'){for(int g=i+1;g>=0;g--)s[g+1]=s[g];i++;s[0]='0';} //加倍 for(i=i-1;i>=0;i--){if(book==1){mid=(s[i]-'0')*2+1;book=0;}else mid=(s[i]-'0')*2;if(mid>=10){book=1;s[i]=mid%10+'0';}else{s[i]=mid+'0';}}//读入数组for(int m=x;m>=0;m--){after[m]=(s[m]-'0');} //判断sort(before,20);sort(after,20);int ise=0;for(int z=0;z<20;z++){if(before[z]!=after[z])ise++;}if(ise>0) printf("No\n%s",s);else printf("Yes\n%s",s);}