试题 基础练习 十进制转十六进制

试题 基础练习 十进制转十六进制

问题描述

十六进制数是在程序设计时经常要使用到的一种整数的表示方式。它有0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F共16个符号,分别表示十进制数的0至15。十六进制的计数方法是满16进1,所以十进制数16在十六进制中是10,而十进制的17在十六进制中是11,以此类推,十进制的30在十六进制中是1E。

给出一个非负整数,将它表示成十六进制的形式。

格式说明

输入格式:

输入包含一个非负整数a,表示要转换的数。0<=a<=2147483647

输出格式:

输出这个整数的16进制表示

测试用例

样例输入:

30

样例输出:

1E

测试用例分析

输入字符串代表的十进制 二进制 十六进制
测试用例1 0 0000 0
测试用例2 30 00011110 1E
测试用例3 456 1 1100 1000 1C8
测试用例4 78945 1 0011 0100 0110 0001 1 3461
...... ...... ...... ......

做题思想

在这里我主要使用了以下方法:

第一:使用了Long这个类,为了防止溢出。

第二:使用了 String toUpperCase(Locale locale) 将所有在此字符 String使用给定的规则,大写输出的字符。

第三: static long parseLong(String s, int radix)
将字符串参数解析为由第二个参数指定的基数中的带符号的 long 。

第四:static String toBinaryString(long i) 返回 long参数的字符串表示形式为基数2中的无符号整数。

第五:static Long valueOf(String s, int radix) 返回一个
Long对象,该对象保存从指定的String String的值,并用第二个参数给出的基数进行解析。

上面的知识都是借助Java API 得以完成,建议大家学习的时候,可以查阅Java的API,下面是我使用的API,希望对你有帮助。

API下载

百度网盘链接:https://pan.baidu.com/s/1fuzj93-nleSeH6dViQJszw
提取码:rr7r

程序如下

第一种程序,在蓝桥杯系统上,只给了45分,顾还不完善,还需要继续思考

代码如下:

import java.util.Scanner;

public class Main{
    
    
	public static void main(String[] args) {
    
    
		// TODO Auto-generated method stub
		Scanner input = new Scanner(System.in);
		String line = input.next();
		//System.out.println(tenToBinary(binToHex(line)));
		System.out.println(tenToBinary(line));
		System.out.println(binToHex(tenToBinary(line)));
	}
	
	//将十进制转换为二进制
	public static String tenToBinary(String string){
    
    
		return formatBinAddZero(Long.toBinaryString(Long.parseLong(string, 10)));
	}
	
	//将二进制转换为十六进制
	public static String binToHex(String bin){
    
    
		return Long.toHexString(Long.valueOf(bin, 2));
	}
	
	//将二进制的添加零情况
	public static String formatBinAddZero(String string){
    
    
		if(string.length() % 4 == 1){
    
    
			string = "000" + string;
		}
		if(string.length() % 4 == 2){
    
    
			string = "00" + string;
		}
		if(string.length() % 4 == 3){
    
    
			string = "0" + string;
		}
		return string;
	}
}

经过我的分析,原因是控制台输出的默认的是小写字母,所以会报错,顾只能得到45分。

错误的程序分析

在上面的代码中,我少添加了将控制台输出的小写字母转换为大写的方法,所以出错。

更重要的一点是:代码不够简洁,鲁棒性差,代码比较冗余,不建议使用,可以参考。

修改代码的灵感来源

修改后的(正确的)代码如下:

import java.util.Scanner;

public class Main {
    
    

	public static void main(String[] args) {
    
    
		// TODO Auto-generated method stub
		Scanner input = new Scanner(System.in);
		String line = input.next();
		//观察,输入的十进制字符串能否正确的转换为二进制
		//System.out.println(tenToBinary(line));
		System.out.println(binToHex(tenToBinary(line)).toUpperCase());
	}
	
	//将十进制转换为二进制
	public static String tenToBinary(String string){
    
    
		return formatBinAddZero(Long.toBinaryString(Long.parseLong(string, 10)));
	}
	
	//将二进制转换为十六进制
	public static String binToHex(String bin){
    
    
		return Long.toHexString(Long.valueOf(bin, 2));
	}
}

在这个代码里面,相比上面的代码,我只添加了一个将小写字母转换为大写字母的方法**toUpperCase()**的方法。

可以借鉴其他博客的写法,很简单

简单的写法

启示

多做多练,多查阅,学习数据结构与算法,能够将代码写得很好,完美。

还需要基本了解一些基本类的用法。比如Integer和Long的区别

一定要学会各进制之间的转换

基本的进制转换方法

一定要细心

猜你喜欢

转载自blog.csdn.net/weixin_45619069/article/details/113086484
今日推荐