• 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
    ":"Yes
    ");
        if(flag==1) printf("1");
        printf("%s",num);
        return 0;
    }
    

    本文来自博客园,作者:勇往直前的力量,转载请注明原文链接:https://www.cnblogs.com/moonlight1999/p/15522378.html

  • 相关阅读:
    hdu5945 Fxx and game
    hdu5937 Equation
    2016-2017 CT S03E06: Codeforces Trainings Season 3 Episode 6 The Baguette Master
    Canada Cup 2016 D. Contest Balloons
    hdu5798 Stabilization
    bzoj 4026 dC Loves Number Theory
    Intel Code Challenge Final Round (Div. 1 + Div. 2, Combined) C. Ray Tracing
    hdu5923 Prediction
    hdu5925 Coconuts
    2016弱校联盟十一专场10.2 Longest Increasing Subsequence
  • 原文地址:https://www.cnblogs.com/moonlight1999/p/15522378.html
Copyright © 2020-2023  润新知