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
    #include<cstdio>
    #include<cstring>
    struct bign{
        int d[21];
        int len;
        bign(){
            memset(d,0,sizeof(d));
            len = 0;
        }
    };
    
    bign change(char str[]){
        bign a;
        a.len = strlen(str);
        for(int i = 0; i < a.len; i++){
            a.d[i] = str[a.len- i - 1] - '0';
        }
        return a;
    } 
    
    bign multi(bign a, int b){
        bign c;
        int carry = 0;
        for(int i = 0; i < a.len; i++){
            int temp = a.d[i] * b + carry;
            c.d[c.len++] = temp%10;
            carry = temp/10;        
        } 
        while(carry != 0){
            c.d[c.len++] = carry%10;
            carry /= 10;
        }
        return c;
    }
    
    bool judge(bign a,bign b){
        if(a.len != b.len) return false;
        int count[10] = {0};
        for(int i = 0; i < a.len; i++){
            count[a.d[i]]++;
            count[b.d[i]]--;
        }
        for(int i = 0; i < 10; i++){
            if(count[i] != 0) return false;
        }
        return true;
    }
    
    void print(bign a){
        for(int i = a.len-1; i >= 0; i--){
            printf("%d",a.d[i]);
        }
    }
    
    int main(){
        char str[21];
        gets(str);
        bign a = change(str);
        bign mul = multi(a,2);
        if(judge(a,mul) == true) printf("Yes
    ");
        else printf("No
    ");
        print(mul);
        return 0;
    }
  • 相关阅读:
    mutt+msmtp实现在shell环境中发送电子邮件
    rsync无密码备份文件的方法
    segemehl 生成sam文件的后续处理——生成methylation table
    ubuntu 14.04 安装VMware虚拟机
    完全用Linux工作
    Ubuntu 与CentOS 6.5 配置单网卡双IP
    How to use Bismark
    How to use segemehl
    Ubuntu 为火狐安装插件
    遇到的问题
  • 原文地址:https://www.cnblogs.com/wanghao-boke/p/8903581.html
Copyright © 2011-2022 走看看