说到进制转换,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. angular-froala-wysiwyg 富文本编辑器使用及遇到的坑

    介绍: angular-froala-wysiwyg: froala editor 的angular版本,支持Angular 2, Angular 4, Angular 5, Angular 6 an ...

  2. ArcGIS API For Javascript_4.8-渲染器SimpleRenderer

    SimpleRenderer require(["esri/renderers/SimpleRenderer"], function(SimpleRenderer) { /* co ...

  3. Expand命令行详解

    使用Expand命令行可以在计算机没有安装Windows操作系统的情况下应用批处理文件和脚本: 虽然有多个基于Windows的工具可以压缩和解压缩文件(包括WinZip和WinRAR),但是必须有一个 ...

  4. python3 变量理解 解释器理解 常量理解 用户交互理解 逻辑运算

    先来条NLP再说...... 九,每人都已经具备使自己快乐的资源 每一个人都有过成功快乐的体验,也即是说有使自己快乐的能力. 人类只用了大脑能力极少部分,提升大脑的运用,很多新的突破便会出现. 运用大 ...

  5. softmax函数详解

    答案来自专栏:机器学习算法与自然语言处理 详解softmax函数以及相关求导过程 这几天学习了一下softmax激活函数,以及它的梯度求导过程,整理一下便于分享和交流. softmax函数 softm ...

  6. Java线程组(ThreadGroup)使用

    JDK 对线程组类注释: A thread group represents a set of threads. In addition, a thread group can also includ ...

  7. 一份非常完整的MySQL规范

    一.数据库命令规范 所有数据库对象名称必须使用小写字母并用下划线分割 所有数据库对象名称禁止使用mysql保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来) 数据库对象的命名要能做到见名 ...

  8. Docker 导出&加载镜像

    文章首发自个人网站:https://www.exception.site/docker/docker-save-load-image 本文中,您将学习 Docker 如何导出&加载镜像.当我们 ...

  9. 机器学习——XGBoost大杀器,XGBoost模型原理,XGBoost参数含义

    0.随机森林的思考 随机森林的决策树是分别采样建立的,各个决策树之间是相对独立的.那么,在我们得到了第k-1棵决策树之后,能否通过现有的样本和决策树的信息, 对第m颗树的建立产生有益的影响呢?在随机森 ...

  10. 机器学习——决策树,DecisionTreeClassifier参数详解,决策树可视化查看树结构

    0.决策树 决策树是一种树型结构,其中每个内部节结点表示在一个属性上的测试,每一个分支代表一个测试输出,每个叶结点代表一种类别. 决策树学习是以实例为基础的归纳学习 决策树学习采用的是自顶向下的递归方 ...