您的位置:首页 > 理论基础 > 数据结构算法

00-自测4. Have Fun with Numbers (20)

2015-07-21 21:11 489 查看
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:
Yes
2469135798

//已通过,但是觉得输入0应该输出Yes+0,这个没有体现出。
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
#include <ctype.h>
int main()
{
char s[22];
int ss[22]={0};
int number[10]={0};
int l,i,j,c=0,flag=1;
scanf("%s",s);
l=strlen(s);

for(i=l-1;i>=0;i--)
{
ss[c++]=s[i]-'0';
}

for(i=0;i<l;i++)
{
number[ss[i]]++;
ss[i]*=2;
}

for(i=0;i<l;i++)
{
if(ss[i]>9)
{
ss[i]=ss[i]-10;
ss[i+1]++;
}
}

for(i=0;i<l;i++)
{
number[ss[i]]--;
}
for(i=0;i<10;i++)
{
if(number[i]!=0)
{
flag=0;
break;
}
}

for(i=20;;i--)
{
if(ss[i]!=0)
break;
}
if(flag==0)
{
printf("No\n");
}
else
{
printf("Yes\n");
}
for(;i>=0;i--)
printf("%d",ss[i]);
printf("\n");

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c 数据结构