说到进制转换,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. .netcore2.1在控制器中和类中,获取appsettings中值的方法

    一般我们在开发项目中,都会从配置文件中获取数据库连接信息.自定义参数配置信息等. 在.netcore中在控制器和自定义类中,获取配置文件中参数方式如下: appsettings.json { &quo ...

  2. C#读写Excel的几种方法

    1 使用Office自带的库 前提是本机须安装office才能运行,且不同的office版本之间可能会有兼容问题,从Nuget下载 Microsoft.Office.Interop.Excel 读写代 ...

  3. sqlserver2014无法打开报Cannot find one or more components_修复方案

    前言:我跟网上大家的原因基本一样,就是好久没用sqlserver了,中间也对VS进行过卸载升级等,突然有一天发现,打开Sqlserver时打不开了,出了一个弹框:Cannot find one or ...

  4. 使用BCDEDIT创建BCD文件

    网上找了好久,总算找到一个完全的BCD文件编辑过程的代码,分享下: ###第1步############################################################ ...

  5. Windows Server 2012 R2安装Oracle 11g问题

      1.[INS-13001]环境不满足最低要求 如图:   oracle11g早于Windows Server 2012 R2 解决方法:找到解压目录../win64_11gR2_database\ ...

  6. vue 对列表数组删除和增加

    很重要,一定要好好研究 https://cn.vuejs.org/v2/guide/list.html#%E6%9B%BF%E6%8D%A2%E6%95%B0%E7%BB%84

  7. 多标签分类的结果评估---macro-average和micro-average介绍

    一,多分类的混淆矩阵 多分类混淆矩阵是二分类混淆矩阵的扩展 祭出代码,画线的那两行就是关键啦: 二,查看多分类的评估报告 祭出代码,使用了classicfication_report() 三,宏平均与 ...

  8. 白话kubernetes的十万个为什么(持续更新中...) - kubernetes

    Kubernetes简称? 答:k8s或kube. Kubernetes是什么? 答:由Google开发的一个强大的平台,可以在集群环境中管理容器化应用程序.本质上是一种特殊的数据库,里面存储的是能够 ...

  9. 再谈AbstractQueuedSynchronizer2:共享模式与基于Condition的等待/通知机制实现

    共享模式acquire实现流程 上文我们讲解了AbstractQueuedSynchronizer独占模式的acquire实现流程,本文趁热打铁继续看一下AbstractQueuedSynchroni ...

  10. eggjs 框架代理调试 SELF_SIGNED_CERT_IN_CHAIN 报错解决方案

    eggjs 中的 this.ctx.curl 可以发起一个请求,配置 proxy 可以很方面的通过接口进行问题定位.代理方式如下: 1.开启 egg-development-proxyagent ,配 ...