时间: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); } }