题目:基础练习 十进制转十六进制
问题描述
十六进制数是在程序设计时经常要使用到的一种整数的表示方式。它有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
答案:
//解法一:
import java.util.*;
public class Main
{
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
Integer n = in.nextInt();
System.out.println(Integer.toHexString(n).toUpperCase());
}
}
//解法二:
import java.util.Scanner;
public class Main
{
public static void main(String[] args)
{
Scanner cin = new Scanner(System.in);
int n = cin.nextInt(), m = 0;
char c;
String s = "";
if (n == 0)
{
s = "0";
}
while (n % 16 != 0 || n / 16 != 0)//考虑到了n大于等于小于16的所有情况
{
m = n % 16;
if (m / 10 == 1)//判断余数m是否大于10
{
c = (char) (65 + m % 10);//余数大于等于10时, 65~90 :A~Z // m % 10 取十进制的数的个位数 个位的数+65得到asc码表中的大写字母
}
else
{
c = (char) (48 + m);// 余数小于10时, 48~57 : 0~9
}
s = c + s;//先算出来的字符放在后面 ;新的+旧的
n = n / 16;//核心就是辗转相除法:这里是先求余数,再求商;如果先求商,因为所有的被除数都共用一个变量,有覆盖的关系,就无法求出上一个被除数所对应的余数了。在辗转相除法中,商和被除数都是同一个角色。一个被除数对应一个余数。存好一个余数后再去求下一个被除数。
}
System.out.println(s);
}
}
个人小结:
48~57 : 0~9
65~90 :A~Z