java:数据结构(二)栈的应用(进制转换全收集)
说到进制转换,java已经封装了基本的方法,在竞赛中使用封装的方法自然能节省大量时间
另一位仁兄介绍的封装好的方法:
https://blog.csdn.net/m0_37961948/article/details/80438113
如果不想看上面的全部,我总结了两条基本方放,记下就可以随意转化:
掌握这两个方法就可以实现任意进制的随便转化
(这个是针对竞赛,如果是需要学习底层,大家还在看api研究吧)
再看一个水题:
题目描述
写出一个程序,接受一个十六进制的数值字符串,输出该数值的十进制字符串。(多组同时输入 )
输入描述:
输入一个十六进制的数值字符串。
输出描述:
输出该数值的十进制字符串。
输入
0xA
输出
10
由于本题目简单,所以只给出代码:
import java.util.Scanner;
import java.util.*; public class Main{
public static void main(String args[]){
Scanner in = new Scanner(System.in);
while (in.hasNext()) {
String a=in.next();
char[] p=a.toCharArray();
a=String.valueOf(Arrays.copyOfRange(p,2,p.length));
System.out.println(Integer.parseInt(a, 16));
}
}
}
后面就是靠栈实现任意进制不使用已经封装好的方法:(栈使用的是我自己写的)
/**
* 进制转换
* 算法设计:先将其他进制统一转为10进制,再利用取余法
* 将10进制转为其他进制
* @param n 需要转化的数
* @param n1 需要转化数的进制
* @param n2 转化后的进制
* @return 转换后的数
*/
static String systemTransformation(String n, int n1, int n2) {
MyArraysStack<Character> e=new MyArraysStack<Character>();
char[] a=new char[]{'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
char[] b=n.toCharArray();
int bNumber=0,t=0;
//[start]将n1进制转为10进制
for (char p:b){
e.push(p);
}
while (!e.isEmpty()){
char temp=e.pop();
bNumber+= Arrays.binarySearch(a,temp)*Math.pow(n1,t);
t++;
}
//[end]
//[start] 将10进制转为n2进制
StringBuilder builder=new StringBuilder();
while (bNumber>0){
e.push(a[bNumber%n2]);
bNumber/=n2;
}
while (!e.isEmpty()) {
builder.append(e.pop());
}
//[end]
String str;
str=builder.toString();
return str;
}
* 算法设计:先将其他进制统一转为10进制,再利用取余法
* 将10进制转为其他进制
* 最高到16进制向其他任意一进制转化
* 如果需要更大的进制则需要扩充a数组即可
当你觉得自己在进制转换上已经完全ok了,此时我又遇到了一道有趣的题目:
题目描述
输入描述:
两个整数
输出描述:
二进制不同位的个数
输入
22 33
输出
5
一看到这道题我首先想到,先将两个数转为二进制,然后循环比对出值(突然感到十分麻烦)
然后一看讨论发现了骚操作:
使用异或:
public class Solution {
/**
* 获得两个整形二进制表达位数不同的数量
*
* @param m 整数m
* @param n 整数n
* @return 整型
*/
public int countBitDiff(int m, int n) {
String str=Integer.toBinaryString(m^n);
str=str.replaceAll("0","");
return str.length();
}
}
异或就是不同为1,相同为0,将m和n异或,是位运算,m^n的结果是m和n二进制的异或结果
Integer.toBinaryString();将m^n转为二进制
然后替换了字符串里面的0,返回字符串长度,即得到了不同的位数
java:数据结构(二)栈的应用(进制转换全收集)的更多相关文章
- Java的浮点数和整数的进制转换
整数的表达 –原码:第一位为符号位(0为正数,1为负数) –反码:符号位不动,原码取反 –负数补码:符号位不动,反码加1 –正数补码:和原码相同 -6 5 原码 10000110 0 ...
- bugku——普通的二维码(进制转换)
题目地址:http://ctf.bugku.com/files/5e480ecb178711e82bc847a208e15b32/misc80.zip 就一张二维码图片,用一些在线工具识别是乱码,用Q ...
- 【JAVA随摘笔记一】进制转换
// 十进制转其它进制(二进制,八进制,十六进制) ; System.out.println(Integer.toBinaryString(k));// 转二进制 10001 System.out.p ...
- 第四章 栈与队列(c1)栈应用:进制转换
- JavaSE教程-03Java中分支语句与四种进制转换
一.分支语句 计算机源于生活,程序模拟现实生活,从而服务生活 行为模式 1,起床,刷牙,洗脸,吃早餐,上课,回家,睡觉(顺序性) 2,如果时间不太够,打个滴滴快车,如果时间够,坐个地铁(选择性) 3, ...
- C++中的各种进制转换函数汇总及学习
一.指定格式输出 1.C中指定格式输出 printf(); //按八进制格式输出,保留5位高位补零 printf(); //按十进制格式输出,保留3位高位补零 printf(); //按十六进制格式输 ...
- JavaSE学习(二):进制转换—数据类型转换—Java运算符
一.进制转换 1.1 其他进制转十进制(以十六进制为例): 十六进制范围:0-9, A-F对应数字10-15 2A7E(16) = 14*16(0) +7*16(1) + 10*16(2) + ...
- java se系列(二) 关键字、注释、常量、进制转换、变量、数据类型转换、运算符
1 关键字 1.1 关键字的概述 Java的关键字对java的编译器有特殊的意义,他们用来表示一种数据类型,或者表示程序的结构等,关键字不能用作变量名.方法名.类名.包名. 1.2 常见的关键字 备注 ...
- SDUT-2131_数据结构实验之栈与队列一:进制转换
数据结构实验之栈与队列一:进制转换 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 输入一个十进制非负整数,将其转换成对 ...
随机推荐
- 《阿里巴巴 Java开发手册》读后感
前言 只有光头才能变强 前一阵子一直在学Redis,结果在黄金段位被虐了,暂时升不了段位了,每天都拿不到首胜(好烦). 趁着学校校运会,合理地给自己放了一个小长假,然后就回家了.回到家才发现当时618 ...
- 使用Git过程中经常会遇到的问题
目录 git pull如何强制覆盖本地文件 Git如何同时删除本地分支和远程分支 Git如何撤销最近一次提交 Git撤销本地的最后一次提交 Git撤销最近一次远程提交 如何修改提交信息和文件 修改本地 ...
- 使用CSS3的clip-path(裁剪路径)实现剪贴区域的显示以及实例实现图片渐变
clip-path介绍 clip-path 直译过来就是裁剪路径,使用SVG或形状定义一个HTML元素的可见区域的方法.想象一下你在Photoshop中勾勒路径的场景.MDN上是这样介绍 clip-p ...
- GIS之家资源
分享资源之arcgis软件系列 arcgis10.0(arcgis desktop以及arcgis server):下载 arcgis10.1(arcgis desktop以及arcgis serve ...
- mt8665芯片怎么样?联发科mt8665芯片参数介绍
MediaTek的MT8665是一款高度集成的LTE片上系统(SoC),它包含了先进的功能,例如LTE cat.4.Octa HMP核心在1.5GHz下工作.3D图形(OpenGLES 3.0).13 ...
- android 系统dialog的应用
应用示例如下: /* * 提示类型dialog */ private void dialog1(){ AlertDialog.Builder builder = new AlertDialog.Bui ...
- Android之CircleImageView使用
文章大纲 一.什么是CircleImageView二.代码实战三.项目源码下载 一.什么是CircleImageView 圆角 ImageView,在我们的 App 中这个想必是太常见了,也许我们 ...
- 批量插入一张表的数据,并且生成不同的uuid 字符截取 批量更新 去除重复数据
INSERT INTO party_branchSELECT UUID(),m.name,m.secreta_name,m.contacts_name,m.contact_phon,m.categor ...
- July 04th. 2018, Week 27th. Wednesday
And if you really want to see what people are, all you have to do is to look. 想真正了解他人,只需要用心看. From W ...
- cmd中输入net start mysql 提示:服务名无效或者MySQL正在启动 MySQL无法启动
在DOS窗口.gitbush以及一些可以使用的命令行工具的界面上,输入:net stop mysql.net start mysql时,总是提示:服务名无效. 出现提示如下: 原因是:因为net st ...