自测-4 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 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
#include <stdio.h>
void double_str(char *n,char *n_double);
void consist_num(int *a,char *n);
int consist_compare(int *a,int *b);
int main()
{
//建立数组时提前预留进位位
char n[22]={'0'},n_double[22]={'0'};
int a[10]={0},b[10]={0};
scanf("%s",n+1);
//每位乘二,从低位向高位
double_str(n,n_double);
consist_num(a,n+1);
//判断首位是否为0,采取不同初始位置
if(n_double[0]=='0')
consist_num(b,n_double+1);
else
consist_num(b,n_double);
if(consist_compare(a,b))
printf("Yes\n");
else
printf("No\n");
if(n_double[0]=='0')
printf("%s",n_double+1);
else
printf("%s",n_double);
return 0;
}
//读取数字位数由几种数字构成
void consist_num(int *a,char *n)
{
char *p=n;
while(*p!='\0')
{
a[*p-48]+=1;
p++;
}
}
//比较两个数字组成的数字是否一样
int consist_compare(int *a,int *b)
{
int i;
for(i=0;i<10;i++)
{
if(a[i]!=b[i]) return 0;
}
return 1;
}
//利用acsii码进行乘二
void double_str(char *n,char *n_double)
{
char *p=n;
int dou,flag=0;
while(*p++!='\0');
p-=2;
while(p>=n)
{
if(flag==1)
{
dou=2*(*p-48)+1;
flag=0;
}
else
dou=2*(*p-48);
if(dou/10!=0) flag=1;
n_double[p-n]=dou%10+48;
p--;
}
}
注意:
在编程中自己设定的方案要与题目要求仔细对比,是否会带来额外的变化。