• 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

  • 相关阅读:
    从零开始~
    SVN
    了解下几个证书~~
    重要的技术发展趋势
    求职路上英语面试试题问答大全
    C语言比java重要吗?
    开源solr搜索服务器配置
    全文索引 与 Like 的实现原理
    nginx搭建多个站点
    .Solr构建索引查询索引
  • 原文地址:https://www.cnblogs.com/moonlight1999/p/15522378.html
Copyright © 2020-2023  润新知