1023. Have Fun with Numbers (20)

来源:互联网 发布:怎么建立淘宝店铺 编辑:程序博客网 时间:2024/06/05 09:28

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<stdio.h>#include<string.h>int num1[10],num2[10];struct bign{int d[1000];int len;};void init(bign &a){int i;a.len=0;for(i=0;i<1000;i++){a.d[i]=0;}}bign change(char *s){bign a;init(a);int i,len=strlen(s);a.len=len;for(i=0;i<len;i++){a.d[i]=s[len-1-i]-'0';}return a;}bign add(bign a,bign b){bign c;init(c);int i,carry=0;for(i=0;i<a.len;i++){c.d[c.len++]=(a.d[i]+b.d[i]+carry)%10;carry=(a.d[i]+b.d[i]+carry)/10;}if(carry){c.d[c.len++]=carry;}return c;}void print(bign a){int i;for(i=a.len-1;i>=0;i--){printf("%d",a.d[i]);}}int main(){char s[30];scanf("%s",s);int i,len=strlen(s);for(i=0;i<len;i++){num1[s[i]-'0']++;}bign a=change(s);bign b=a;bign c=add(a,b);for(i=0;i<c.len;i++){num2[c.d[i]]++;}int flag=1;for(i=0;i<10;i++){if(num1[i]!=num2[i]){flag=0;break;}}if(flag){printf("Yes\n");}else{printf("No\n");}print(c);}