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

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

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

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

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

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

再看一个水题:

题目描述

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

输入描述:

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

输出描述:

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

示例1

输入

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了,此时我又遇到了一道有趣的题目:

题目描述


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

输入描述:

两个整数

输出描述:

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

输入

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:数据结构(二)栈的应用(进制转换全收集)的更多相关文章

  1. Java的浮点数和整数的进制转换

    整数的表达 –原码:第一位为符号位(0为正数,1为负数) –反码:符号位不动,原码取反 –负数补码:符号位不动,反码加1 –正数补码:和原码相同     -6      5 原码 10000110 0 ...

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

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

  3. 【JAVA随摘笔记一】进制转换

    // 十进制转其它进制(二进制,八进制,十六进制) ; System.out.println(Integer.toBinaryString(k));// 转二进制 10001 System.out.p ...

  4. 第四章 栈与队列(c1)栈应用:进制转换

  5. JavaSE教程-03Java中分支语句与四种进制转换

    一.分支语句 计算机源于生活,程序模拟现实生活,从而服务生活 行为模式 1,起床,刷牙,洗脸,吃早餐,上课,回家,睡觉(顺序性) 2,如果时间不太够,打个滴滴快车,如果时间够,坐个地铁(选择性) 3, ...

  6. C++中的各种进制转换函数汇总及学习

    一.指定格式输出 1.C中指定格式输出 printf(); //按八进制格式输出,保留5位高位补零 printf(); //按十进制格式输出,保留3位高位补零 printf(); //按十六进制格式输 ...

  7. JavaSE学习(二):进制转换—数据类型转换—Java运算符

    一.进制转换 1.1 其他进制转十进制(以十六进制为例): 十六进制范围:0-9, A-F对应数字10-15 2A7E(16)  =  14*16(0) +7*16(1) + 10*16(2)  + ...

  8. java se系列(二) 关键字、注释、常量、进制转换、变量、数据类型转换、运算符

    1 关键字 1.1 关键字的概述 Java的关键字对java的编译器有特殊的意义,他们用来表示一种数据类型,或者表示程序的结构等,关键字不能用作变量名.方法名.类名.包名. 1.2 常见的关键字 备注 ...

  9. SDUT-2131_数据结构实验之栈与队列一:进制转换

    数据结构实验之栈与队列一:进制转换 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 输入一个十进制非负整数,将其转换成对 ...

随机推荐

  1. react native中使用echarts

    开发平台:mac pro node版本:v8.11.2 npm版本:6.4.1 react-native版本:0.57.8 native-echarts版本:^0.5.0 目标平台:android端收 ...

  2. OKR能解决996吗?德鲁克怎么看?

    最近网络上热议的“996”,不由让人想起我们的邻国日本.他们在20年前就有过一个热词“过劳死”,就是职场加班太严重导致的猝死. 最近有一本书新书<过劳时代>,说的就是日本20年前的过劳死. ...

  3. js复制粘贴模板

    <script> //绑定在了body上,也可以绑定在其他可用元素行,但是不是所有元素都支持copy和past事件. /* $(document.body).bind({ copy: fu ...

  4. vue项目使用 prerender-spa-plugin 预渲染

    由于项目要做seo优化,而用vue写成的spa页面谷歌浏览器等是抓取不到数据的.介于ssr和预渲染来说,后者相对来说要简单许多.所以采用了预渲染方式.采用插件prerender-spa-plugin使 ...

  5. Jvm启动,关闭及对应钩子

    很多时候应用服务启动或关闭会做一些预加载(比如缓存,定时任务启动等)或收尾处理工作(比如程序失败记录等) 1. 首先看下Spring框架服务启动加载操作实现,直接上代码 继承实现接口Applicati ...

  6. Java转PHP的心路历程

    首先,我要批评一下自己,已经好久没发博客了.总是拿奇奇怪怪的理由来妨碍自己写博客. emmmm,现在心里舒服一点了. 前提 在2018年的11月7号,我从广州跳槽到一个三线的小城市工作.跳槽原因比较羞 ...

  7. Linux 使用 top 命令查看系统的运行情况

    top命令显示界面 top命令默认在一个特定间隔(3秒)后刷新显示.要手动刷新,用户可以输入回车或者空格. top - 18:32:45 up 230 days, 2:01, 1 user, load ...

  8. 【Git之旅】1.Git常用命令

    1.创建初始化版本库 git init 2.将文件添加到版本库中 git add index.html (添加到暂存区) git add . 命令让Git把当前目录及目录中的文件都添加到版本库里 gi ...

  9. 【Python篇】---Python3.5在Centoos的安装教程--超实用

    一.前述 Python3在公司用的还是比较多的,但一般Centoos默认是python2的环境.所以本文就python3的安装做个总结. 二.具体 1.查看python版本python 命令即可 2. ...

  10. Linux知识要点大全(第四章)

    第四章 文件管理 *主要内容 文件和目录的操作: ①创建 ②删除 ③拷贝 ④重命名(剪切) ⑤查看 一:目录的操作 回顾与目录相关的命令 ls  查看目录中的内容 .pwd 打印当前目录   .cd  ...