考研机试 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);
    }
}

 

上一篇:考研机试 24.N的阶乘


下一篇:java大数的基本知识