标签:BigInteger ch 进制 二进制 String VS 机试 十进制 逆序
时间: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); } }
标签:BigInteger,ch,进制,二进制,String,VS,机试,十进制,逆序 来源: https://www.cnblogs.com/machi12/p/14491763.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。