加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

将一个十进制整数转换成对应的十五进制数

(2017-08-10 11:11:53)
标签:

进制

转换

这个数字转化成对应的

面试题

进制转换

分类: 面试总结
面试题:输入一个十进制整数,将这个数字转化成对应的十五进制数(在十五进制中,A表示10,B表示11,C表示12,D表示13, E表示14),请写入转换程序。例如:235表示为10A;

分析:进制转换思路:10进制除以15商和余数,反复拿商除以15获得商和余数,类推,知道商为0,停止;

以235表示为10A为例分析:
235/15 = 15 余数10
15/15 = 1 余数 0
1/15 = 0 余数 1

得到数据10, 0, 1, 反序结果为1, 0, 10, 对比结果: 1-》1, 0-》0, 10-》A, 所以235表示的十五进制数为:10A;

代码实现:

@Test
public void testTimes() {
System.out.println("十进制转二进制:" + Integer.toBinaryString(1000211));
Scanner scanner = new Scanner(System.in);
System.out.println("请输入十进制数字::::");
String temp = scanner.next();
Integer in = Integer.parseInt(temp, 10);
List list = Lists.newArrayList();
while(true) {
list.add(in % 15); // 取余数
in = in / 15;  // 取余数
if (in == 0) { // 停止循环
break;
}
}
StringBuffer str = new StringBuffer(); // 拼接字符串
// 倒排
for (int i = list.size() - 1 ; i >= 0; i--) {
int number = list.get(i);
if (number == 10) {
str.append("A");
} else if (number == 11) {
str.append("B");
} else if (number == 12) {
str.append("C");
} else if (number == 13) {
str.append("D");
} else if (i == 14) {
str.append("E");
} else {
str.append(number);
}
}
System.out.println(str);
scanner.close(); // 用完关闭流
}

扩展:方法parseInt(String s,int radix)的目的是输出一个十进制数

 static int parseInt(String s, int radix)     s为包含要解析的int表示形式的String,radix为解析s时使用的基数。。。将radix进制转成为十进制

例子 输入十六进制转换成为十进制输出

Integer.parseInt(str,16));
我们平时用到Integer.parseInt("123");其实默认是调用了int i =Integer.parseInt("123",10);  
其中10代表的默认是10进制的,转换的过程可以看成:  
                          
            i=  1*10*10+2*10+3  
若是  
               int i = Integer.parseInt("123",16);  
即可以看成:  
               = 1*16*16+2*16+3 = 291 
  
根据:Character.MIN_RADIX=2和Character.MAX_RADIX=36 则,parseInt(String s, int radix)参数中  
radix的范围是在2~36之间,超出范围会抛异常。其中s的长度也不能超出7,否则也会抛异常。
  

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有