zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    zip加密-字符串加密成字符串
    语言学习第一天
    localStorage和sessionStorage数据存储
    ValueOf()和toString()
    call()与apply()区别typeof和instanceof的区别
    javaScript判断手机型号
    HTML&CSS
    Doctype 严格模式与混杂模式-如何触发这两种模式,区分它们有何意义?
    获得地址栏内的参数
    私有变量
  • 原文地址:https://www.cnblogs.com/moonlight1999/p/15522378.html
Copyright © 2011-2022 走看看