• 考研机试 26.10进制 VS 2进制


    时间:2021/03/06

    一.题目描述

    对于一个十进制数A,将A转换为二进制数,然后按位逆序排列,再转换为十进制数B,我们称B为A的二进制逆序数。     例如对于十进制数173,它的二进制形式为10101101,逆序排列得到10110101,其十进制数为181,181即为173的二进制逆序数。

    输入描述

    一个1000位(即10^999)以内的十进制数。

    输出描述

    输入的十进制数的二进制逆序数。

    题目链接

    https://www.nowcoder.com/practice/fd972d5d5cf04dd4bb4e5f027d4fc11e?

    tpId=40&tags=&title=&diffculty=0&judgeStatus=0&rp=1&tab=answerKey

    二.算法

    题解

    由于题目说输入的是一个1000位以内的十进制数,所以要用BigInteger类来存储。然后通过BigInteger类的toString类转化为一个二进制的字符串,之后进行逆序,然后将逆序后的字符串转化为一个基数为二进制的BigInteger对象,最后再通过toString方法转化为十进制字符串(要注意这里在生成BigInteger对象时定义的基数是二进制,表明这个字符串的基数是二进制,不能是十进制,十进制是之后要转化的)。

    代码

    import java.util.Scanner;
    import java.math.BigInteger;
    
    public class Main{
        
        public static void main(String[] args){
            
            Scanner in = new Scanner(System.in);
            
            //读取输入
            BigInteger n1 = new BigInteger(in.next());
            
            //转化为二进制
            String num2 = n1.toString(2);
            
            //逆序
            char[] ch = num2.toCharArray();
            for(int i = 0; i < ch.length / 2; i++){
                char temp = ch[i];
                ch[i] = ch[ch.length - i - 1];
                ch[ch.length - i - 1] = temp;
            }
            
            //转化为十进制
            String str1 = String.valueOf(ch);
            BigInteger n2 = new BigInteger(str1, 2);    //创建一个二进制的BigInteger对象
            String num10 = n2.toString(10);    //将二进制的BigInteger对象转化为十进制的字符串
            
            System.out.println(num10);
        }
    }
  • 相关阅读:
    poj2774
    GDOI2012 字符串
    poj3261
    poj1743
    bzoj 2565 manacher
    归档-ios
    学习
    ViewPager动态加载、删除页面
    android:ScrollView嵌套ListView的问题
    Android学习笔记进阶之在图片上涂鸦(能清屏)
  • 原文地址:https://www.cnblogs.com/machi12/p/14491763.html
Copyright © 2020-2023  润新知