java:数据结构(二)栈的应用(进制转换全收集)
说到进制转换,java已经封装了基本的方法,在竞赛中使用封装的方法自然能节省大量时间
另一位仁兄介绍的封装好的方法:
https://blog.csdn.net/m0_37961948/article/details/80438113
如果不想看上面的全部,我总结了两条基本方放,记下就可以随意转化:
掌握这两个方法就可以实现任意进制的随便转化
(这个是针对竞赛,如果是需要学习底层,大家还在看api研究吧)
再看一个水题:
题目描述
写出一个程序,接受一个十六进制的数值字符串,输出该数值的十进制字符串。(多组同时输入 )
输入描述:
输入一个十六进制的数值字符串。
输出描述:
输出该数值的十进制字符串。
输入
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了,此时我又遇到了一道有趣的题目:
题目描述
输入描述:
两个整数
输出描述:
二进制不同位的个数
输入
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:数据结构(二)栈的应用(进制转换全收集)相关推荐
- 进制转换数据结构c语言不用栈,急求!!!用数据结构(C语言)利用栈实现十进制向二(八)进制转换,要有注释,谢谢!...
匿名用户 1级 2013-12-05 回答 #include #include #include typedef unsigned int data_type; //结点数62616964757a68 ...
- 数据结构之栈 篇四——栈应用实现进制转换
在前面博客的基础上,应用栈实现进制转换, 主要思想就是短除法,我们利用栈的先进后出的功能来实现逆向输出即可. 下面代码还需要篇三里面的文件,MyStack.h 1.应用一,简单篇 #include & ...
- 【Java基础篇】Unicode、进制转换
一.unicode 先说一下unicode是什么? 最开始美国人搞出了ASCII这个东西,什么意思呢? 首先一个字节,我们都知道是8个bit位,总共能表示256种状态,然后我们就把这256种状态每种状 ...
- (二) 数据存储_进制转换_编码_字节
文章目录 数据如何存储到计算机? 寄存器 高速缓冲存储器(Cache) 内存 硬盘 进制转换 [1] 十进制->二进制 [2] 二进制->十进制 [3] 十进制->八进制 [4] 八 ...
- 栈的应用(进制转换)
class Stack:def __init__(self):self.items=[]def isEmpty(self):return self.items==[]def push(self,ite ...
- 数据结构实验之栈一:进制转换
题目描述 输入一个十进制整数,将其转换成对应的R(2<=R<=9)进制数,并输出. 输入 第一行输入需要转换的十进制数: 第二行输入R. 输出 输出转换所得的R进制数. 示例输入 1279 ...
- JAVA基础——关键字与保留字——标识符——进制转换
本节学习目录 前言 一.JAVA的关键字和保留字 1.什么是Java关键字? 2.什么是Java保留字? 二.JAVA标识符及命名规则 1.标识符 2.命名规则 三.进制的转换 1.何为进制? (1) ...
- 栈应用之进制转换(C语言)
通过入栈和出栈实现二进制与十进制的相互转换 二进制转十进制的步骤: 100110 = 0×20 + 1×21 + 1×22 + 0×23 + 0×24 + 1×25 = 38 我们在键盘敲入10011 ...
- bugku——普通的二维码(进制转换)
题目地址:http://ctf.bugku.com/files/5e480ecb178711e82bc847a208e15b32/misc80.zip 就一张二维码图片,用一些在线工具识别是乱码,用Q ...
最新文章
- 108.什么是信道?109.信道分类 110.什么是模拟信号?什么是数字信号?
- 路由器交换机命令总结
- Professional IronPython
- iOS开发笔记[16/50]:Views
- jzoj4229-学习神技【逆元,费马小定理】
- java 可以重载等于号码_Java面试之Java基础4——重载与重写的区别
- leetcode 49. 字母异位词分组(排序+hash)
- Python协程--实现斐波那契数列(Fibonacci)的几种方式
- 说说那些死于决斗的大牛
- (转)javascript异步编程的四种方法
- Transposed Convolution 反卷积
- linux进程磁盘io监测,系统性能检测--磁盘io
- mac 安装使用Liteide
- wince 德赛187a__艾默生CT M8x0-03200066A
- 为什么大家越来越重视大数据的发展?
- 网线连接威纶触摸屏失败的解决方法
- 点击文本或按钮实现复制
- 一起来学java!!! day003 流程控制01 你掉了金斧头还是银斧头?
- MySQL 为日期增加一个时间间隔
- 想提高团队技术,来试试这个套路! (作为个人提高的套路也行呢)