文档章节

[编程题]进制转换

 笨拙的小Q
发布于 2016/04/22 16:10
字数 878
阅读 554
收藏 3

1、题目内容

[编程题]进制转换

写出一个程序,接受一个十六进制的数值字符串,输出该数值的十进制字符串。(多组同时输入 )
输入描述:
输入一个十六进制的数值字符串。
输出描述:
输出该数值的十进制字符串。
输入例子:
0xA
输出例子:
10

2、题目解析

方法1:将十六进制的数值字符串转换成十进制字符串,用Integer类的

public static int parseInt(String s,int radix)
                    throws NumberFormatException

方法:使用第二个参数指定的基数,将字符串参数解析为有符号的整数。

因为十六进制的数值字符串的前两个字符是0和X,所以要截取字符串前两个字符之后的子串再解析成整形。

代码如下:

import java.util.Scanner;
public class Main{
    public static void main(String[]args){
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){//多个测试用例用while(sc.hasNext()){}
            String s = sc.next().substring(2);
            System.out.println(Integer.parseInt(s,16));
        }        
    }
}

方法2:自己写转换方法

用一个字符串可变序列StringBuilder来接收输入的十六进制的数值字符串,因为十六进制的数值字符串的前两个字符是0和X,所以要截取字符串前两个字符之后的子串,用得到的子串转换成10进制。例如:0x12转换成10进制为1乘以16的1次方加上2乘以16的0次方(1*16^1+2*16^0;),观察16的幂正好是字符串中的字符倒序之后的下标,即字符值乘以16的字符下标次方。所以要反转字符串,再将字符串转化成字符数组,遍历字符数组在通过上述方法转换成10进制。

步骤

1、创建扫描器对象(Scanner sc = new Scanner(System.in))

2、为实现多用例测试;使用while(sc.hasNext()){}来判断是否还有输入。

3、在while循环里实现转换功能。

4、创建一个字符串可变序列StringBuilder对象;

5、将键盘录入的字符串值添加到字符串可变序列

6、将字符串可变序列对象反转并截取,得到一个新的字符串。

7、将新的字符串转化成字符数组

8、定义一个int型的变量,装载转换后的10进制值。

9、遍历字符数组,判断每个字符。因为十六进制的a(A)->10,b(B)->11,c(C)->12,d(D)->13,e(E)->14,f(F)->15.超出F就不是16进制数啦。

for(int i=0;i<ch.length;i++){
    if(ch[i]>='A'&&ch[i]<='F'){
         sum+=(ch[i]-55)*Math.pow(16, i);
    }else if(ch[i]>='a'&&ch[i]<='f'){
         sum+=(ch[i]-87)*Math.pow(16, i);
    }else if(ch[i]>='0'&&ch[i]<='9'){
         sum+=(ch[i]-48)*Math.pow(16, i);
    }else{
         System.out.println("输入的字符串不是十六进制形式!");
    }
}

10、输出int型的变量就是转换后的10进制数啦。

代码如下:

                                import java.util.Scanner;
public class Main{
    public static void main(String[]args){
        /*Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            String s = sc.next().substring(2);
            System.out.println(Integer.parseInt(s,16));
        }*/
        Scanner sc = new Scanner(System.in);
        //不用Integer类的方法转换,自己转换
        while(sc.hasNext()){
            StringBuilder sb = new StringBuilder();
            sb.append(sc.next());
            String s = sb.reverse().substring(0, sb.length()-2);
            char[]ch = s.toCharArray()
            int sum = 0;
            for(int i=0;i<ch.length;i++){
            if(ch[i]>='A'&&ch[i]<='F'){
                sum+=(ch[i]-55)*Math.pow(16, i);
            }else if(ch[i]>='a'&&ch[i]<='f'){
                 sum+=(ch[i]-87)*Math.pow(16, i);
            }else if(ch[i]>='0'&&ch[i]<='9'){
                 sum+=(ch[i]-48)*Math.pow(16, i);
            }else{
                    System.out.println("输入的字符串不是十六进制形式!");
            }
         }
           System.out.println(sum);
        }   
    }
}

 

 

 

© 著作权归作者所有

粉丝 2
博文 58
码字总数 27842
作品 0
南京
私信 提问
快速理解["1", "2", "3"].map(parseInt)

这道很经典的面试题已经过去很多年了,但是现在依然被很多人 传颂 着。以前研究过这道题,觉得弄懂了。但是今天被别人问起这道题时回答的又有点 模棱两可。 我们先看一下输出结果 考察点: Ar...

Erdong
09/03
0
0
LeetCode | 2 的幂

LeetCode 题库的第 231 题 —— 2 的幂 这题也是比较容易的一题,前提是找到规律即可。如果从 10 进制的角度观察 2 的幂次方,可能并不容易发现规律,那么可以从 2 进制的角度进行观察。 举例...

码农UP2U
10/14
0
0
2018北京小学生信息学科普竞赛试题点评

今年的题量与往年一样。都是五道题。 第1题是近十三届比赛中最难的。往年的第一题,往往就是求一下两个数的积,或者字符串原样输出。而今年的第1题,则需要求开方和平方,难度明显增大了很多...

海天一树X
01/08
0
0
Excell列标题

原题   Given a positive integer, return its corresponding column title as appear in an Excel sheet.   For example:...

一贱书生
2016/12/26
4
0
JavaScript实现LeetCode第476题:数字的补数

文章首次发表在: JavaScript实现LeetCode第476题:数字的补数 题目描述 给定一个正整数,输出它的补数。补数是对该数的二进制表示取反。 注意: 给定的整数保证在32位带符号整数的范围内。 你...

funnycoderstar
2018/09/06
0
0

没有更多内容

加载失败,请刷新页面

加载更多

开发经验 初学51单片机建议用C语言

typesetting : Markdown    blog : my.oschina.net/zhichengjiu    gitee : gitee.com/zhichengjiu   新手学习51单片机建议用C语言。因为使用C语言入门的话,上手速度快。实现几个例程后...

志成就
11分钟前
3
0
mybatis异常:nested exception is org.apache.ibatis.builder.BuilderException: Error resolving JdbcType

mybatis异常:nested exception is org.apache.ibatis.builder.BuilderException: Error resolving JdbcType 异常详细 org.mybatis.spring.MyBatisSystemException: nested exception is org......

开元中国2015
12分钟前
3
0
Hexo博客搭建

本文默认已经安装好git和node.js环境 版本说明:git version 2.16.2.windows.1 、 node.js v8.9.4 Hexo是什么   Hexo 是一个快速、简洁且高效的博客框架,这里不多介绍,丢个链接,感兴趣的...

逸竹小站
37分钟前
3
0
学习记录 Vue(模板,差值表达式,v-text,v-html,v-bind,v-model,v-if,v-show,v-for,v-on,this关键字,按键修饰符)

模板示范 <div id="d1"></div><script> new Vue({ el:"#d1", //作用的区域 data:{//参数 }, methods:{// 函数 ......

Pole丶逐
38分钟前
3
0
vue vue-router beforeRouteEnter

本文转载于:专业的前端网站➬vue vue-router beforeRouteEnter beforeRouteEnter (to, from, next) { // 在渲染该组件的对应路由被 confirm 前调用 // 不!能!获取组件实例 `thi...

前端老手
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部