1023 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 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

生词

英文 解释
duplication 重复
permutation 排列
property 特性

题目大意:

给出一个长度不超过20的整数,问这个整数两倍后的数位是否为原数位的一个排列。不管是yes还是no最后都要输出整数乘以2的结果

分析:

使用char数组存储这个数,没个数的数位乘以2 + 进位,同时设立book来标记数位出现的情况。只有最后book的每个元素都是0的时候才说明这两个数字是相等的一个排列结果~

原文链接:https://blog.csdn.net/liuchuo/article/details/52155928

题解

#include <bits/stdc++.h>

using namespace std;
int book[10];
int main()
{
#ifdef ONLINE_JUDGE
#else
    freopen("1.txt", "r", stdin);
#endif
    int flag=0;
    char num[20];
    scanf("%s",num);
    for(int i=strlen(num)-1;i>=0;i--){
        int temp=num[i]-'0';
        book[temp]++;
        temp=temp*2+flag;
        //没有产生进位需要重新赋值为0
        //否则flag一直是1
        flag=0;
        if(temp>=10){
            temp-=10;
            flag=1;
        }
        num[i]=temp+'0';
        book[temp]--;
    }
    int flag1=0;
    for(int i=0;i<10;i++){
        if(book[i]!=0) flag1=1;
    }
    printf("%s",(flag1==1||flag==1)?"No\n":"Yes\n");
    if(flag==1) printf("1");
    printf("%s",num);
    return 0;
}
posted @ 2021-11-07 23:47  勇往直前的力量  阅读(63)  评论(0编辑  收藏  举报