Loading

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

 

posted @ 2021-03-08 15:33    阅读(87)  评论(0编辑  收藏  举报