考研机试 56.进制转换
时间:2021/03/08
一.题目描述
求任意两个不同进制非负整数的转换(2进制~16进制),所给整数在long所能表达的范围之内。 不同进制的表示符号为(0,1,...,9,a,b,...,f)或者(0,1,...,9,A,B,...,F)。
输入描述
输入只有一行,包含三个整数a,n,b。a表示其后的n 是a进制整数,b表示欲将a进制整数n转换成b进制整数。
a,b是十进制整数,2 =< a,b <= 16。 数据可能存在包含前导零的情况。
输出描述
可能有多组测试数据,对于每组数据,输出包含一行,该行有一个整数为转换后的b进制数。
输出时字母符号全部用大写表示,即(0,1,...,9,A,B,...,F)。
题目链接
https://www.nowcoder.com/practice/8ef02ef8571b417d8c311a87861f7a03?
tpId=40&tqId=21387&rp=1&ru=%2Fta%2Fkaoyan&qru=%2Fta%2Fkaoyan%2Fquestion-ranking&tab=answerKey
二.算法
题解
虽然说题目中说所给的整数在long类型的范围内,但是为了偷懒,这里使用BigInteger对象来存放数据,因为BigInteger对象在进制转换上太方便了。我们在创建该对象时可以指定该字符串的进制数,然后通过toString方法就可以转化成想要的进制数。这里还要注意要将字符串都转换为大写。
代码
import java.util.Scanner; import java.math.BigInteger; public class Main{ public static void main(String[] args){ Scanner in = new Scanner(System.in); while(in.hasNext()){ //读取输入数据 int a = in.nextInt(); BigInteger num = new BigInteger(in.next(), a); int b = in.nextInt(); //进行进制转换并输出 System.out.println((num.toString(b)).toUpperCase()); } } }
努力,向上,自律