说到进制转换,java已经封装了基本的方法,在竞赛中使用封装的方法自然能节省大量时间

另一位仁兄介绍的封装好的方法:

https://blog.csdn.net/m0_37961948/article/details/80438113

如果不想看上面的全部,我总结了两条基本方放,记下就可以随意转化:

掌握这两个方法就可以实现任意进制的随便转化

(这个是针对竞赛,如果是需要学习底层,大家还在看api研究吧)

再看一个水题:

题目描述

写出一个程序,接受一个十六进制的数值字符串,输出该数值的十进制字符串。(多组同时输入 )

输入描述:

输入一个十六进制的数值字符串。

输出描述:

输出该数值的十进制字符串。

示例1

输入

0xA

输出

10

由于本题目简单,所以只给出代码:

 1 import java.util.Scanner;
 2 import java.util.*;
 3
 4     public class Main{
 5         public static void main(String args[]){
 6             Scanner in = new Scanner(System.in);
 7         while (in.hasNext()) {
 8             String a=in.next();
 9             char[] p=a.toCharArray();
10             a=String.valueOf(Arrays.copyOfRange(p,2,p.length));
11             System.out.println(Integer.parseInt(a, 16));
12             }
13         }
14     }

后面就是靠栈实现任意进制不使用已经封装好的方法:(栈使用的是我自己写的)

 1    /**
 2      * 进制转换
 3      * 算法设计:先将其他进制统一转为10进制,再利用取余法
 4      * 将10进制转为其他进制
 5      * @param n  需要转化的数
 6      * @param n1 需要转化数的进制
 7      * @param n2 转化后的进制
 8      * @return 转换后的数
 9      */
10     static String systemTransformation(String n, int n1, int n2) {
11         MyArraysStack<Character> e=new MyArraysStack<Character>();
12         char[] a=new char[]{'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
13         char[] b=n.toCharArray();
14         int bNumber=0,t=0;
15         //[start]将n1进制转为10进制
16         for (char p:b){
17             e.push(p);
18         }
19         while (!e.isEmpty()){
20             char temp=e.pop();
21             bNumber+= Arrays.binarySearch(a,temp)*Math.pow(n1,t);
22             t++;
23         }
24         //[end]
25         //[start]  将10进制转为n2进制
26         StringBuilder builder=new StringBuilder();
27         while (bNumber>0){
28             e.push(a[bNumber%n2]);
29             bNumber/=n2;
30         }
31         while (!e.isEmpty()) {
32             builder.append(e.pop());
33         }
34         //[end]
35         String str;
36         str=builder.toString();
37         return str;
38     }

* 算法设计:先将其他进制统一转为10进制,再利用取余法
* 将10进制转为其他进制* 最高到16进制向其他任意一进制转化* 如果需要更大的进制则需要扩充a数组即可当你觉得自己在进制转换上已经完全ok了,此时我又遇到了一道有趣的题目:

题目描述

输入两个整数,求两个整数二进制格式有多少个位不同

输入描述:

两个整数

输出描述:

二进制不同位的个数
示例1

输入

22 33

输出

5

一看到这道题我首先想到,先将两个数转为二进制,然后循环比对出值(突然感到十分麻烦)然后一看讨论发现了骚操作:使用异或:
 1 public class Solution {
 2     /**
 3      * 获得两个整形二进制表达位数不同的数量
 4      *
 5      * @param m 整数m
 6      * @param n 整数n
 7      * @return 整型
 8      */
 9     public int countBitDiff(int m, int n) {
10         String str=Integer.toBinaryString(m^n);
11         str=str.replaceAll("0","");
12         return str.length();
13     }
14 }

  异或就是不同为1,相同为0,将m和n异或,是位运算,m^n的结果是m和n二进制的异或结果

  Integer.toBinaryString();将m^n转为二进制

  然后替换了字符串里面的0,返回字符串长度,即得到了不同的位数

 

转载于:https://www.cnblogs.com/lzy321/p/10388131.html

java:数据结构(二)栈的应用(进制转换全收集)相关推荐

  1. 进制转换数据结构c语言不用栈,急求!!!用数据结构(C语言)利用栈实现十进制向二(八)进制转换,要有注释,谢谢!...

    匿名用户 1级 2013-12-05 回答 #include #include #include typedef unsigned int data_type; //结点数62616964757a68 ...

  2. 数据结构之栈 篇四——栈应用实现进制转换

    在前面博客的基础上,应用栈实现进制转换, 主要思想就是短除法,我们利用栈的先进后出的功能来实现逆向输出即可. 下面代码还需要篇三里面的文件,MyStack.h 1.应用一,简单篇 #include & ...

  3. 【Java基础篇】Unicode、进制转换

    一.unicode 先说一下unicode是什么? 最开始美国人搞出了ASCII这个东西,什么意思呢? 首先一个字节,我们都知道是8个bit位,总共能表示256种状态,然后我们就把这256种状态每种状 ...

  4. (二) 数据存储_进制转换_编码_字节

    文章目录 数据如何存储到计算机? 寄存器 高速缓冲存储器(Cache) 内存 硬盘 进制转换 [1] 十进制->二进制 [2] 二进制->十进制 [3] 十进制->八进制 [4] 八 ...

  5. 栈的应用(进制转换)

    class Stack:def __init__(self):self.items=[]def isEmpty(self):return self.items==[]def push(self,ite ...

  6. 数据结构实验之栈一:进制转换

    题目描述 输入一个十进制整数,将其转换成对应的R(2<=R<=9)进制数,并输出. 输入 第一行输入需要转换的十进制数: 第二行输入R. 输出 输出转换所得的R进制数. 示例输入 1279 ...

  7. JAVA基础——关键字与保留字——标识符——进制转换

    本节学习目录 前言 一.JAVA的关键字和保留字 1.什么是Java关键字? 2.什么是Java保留字? 二.JAVA标识符及命名规则 1.标识符 2.命名规则 三.进制的转换 1.何为进制? (1) ...

  8. 栈应用之进制转换(C语言)

    通过入栈和出栈实现二进制与十进制的相互转换 二进制转十进制的步骤: 100110 = 0×20 + 1×21 + 1×22 + 0×23 + 0×24 + 1×25 = 38 我们在键盘敲入10011 ...

  9. bugku——普通的二维码(进制转换)

    题目地址:http://ctf.bugku.com/files/5e480ecb178711e82bc847a208e15b32/misc80.zip 就一张二维码图片,用一些在线工具识别是乱码,用Q ...

最新文章

  1. 108.什么是信道?109.信道分类 110.什么是模拟信号?什么是数字信号?
  2. 路由器交换机命令总结
  3. Professional IronPython
  4. iOS开发笔记[16/50]:Views
  5. jzoj4229-学习神技【逆元,费马小定理】
  6. java 可以重载等于号码_Java面试之Java基础4——重载与重写的区别
  7. leetcode 49. 字母异位词分组(排序+hash)
  8. Python协程--实现斐波那契数列(Fibonacci)的几种方式
  9. 说说那些死于决斗的大牛
  10. (转)javascript异步编程的四种方法
  11. Transposed Convolution 反卷积
  12. linux进程磁盘io监测,系统性能检测--磁盘io
  13. mac 安装使用Liteide
  14. wince 德赛187a__艾默生CT M8x0-03200066A
  15. 为什么大家越来越重视大数据的发展?
  16. 网线连接威纶触摸屏失败的解决方法
  17. 点击文本或按钮实现复制
  18. 一起来学java!!! day003 流程控制01 你掉了金斧头还是银斧头?
  19. MySQL 为日期增加一个时间间隔
  20. 想提高团队技术,来试试这个套路! (作为个人提高的套路也行呢)

热门文章

  1. 如何在windows7和windows8双系统中卸载windows8
  2. Android的数据存储
  3. 【SSM框架系列】Spring IoC(控制反转) DI(依赖注入)注解开发
  4. 星空[好题][题意转化]
  5. MySQL查看、创建和删除索引的方法
  6. 为何Apache下.htaccess不起作用,Linux、Windows详解
  7. [转]linux tr命令详解
  8. css3选择器的比较(二) -- 包含字符串
  9. Win Phone 8 实现页面导航
  10. 一个可以显示具体时间的日历控件应用