Java算法学习:java进制转换(十进制转八进制,十进制转二进制,十六进制转八进制)

article/2025/9/24 0:34:37

java进制转换(十进制转八进制,十进制转二进制,十六进制转八进制)

这几天在复习C语言的数据结构栈和队列那一章的时候,看到利用栈的特性FILO实现的进制转换十分简洁

想起了java中实现栈的操作十分方便(不用自己写.h文件,内部util.Stack包已经封装好)

所以用这个来写一个进制转换作为记录

十进制怎么转化为二进制呢?

    public void Dex2Bin(int n){int x;Stack<Integer> stack = new Stack<>();while(n>0){x=n%2;stack.push(x);n/=2;}while(!stack.empty()){int num = stack.pop();System.out.format("%d",num);}}

首先是获取被转换的数据n,创建一个栈,new即可,自动初始化(对应C语言中的top指针指向base)

当n>0的时候,不断的:

  • 除以2取余 x=n%2,取余的数字压栈
  • 数字除以2取整 n/=2

这样就完成了对一个数字进制转换的过程。

输出的时候只要对stack不断的pop即可

同理十进制转八进制也是如此

    public void Dex2Oct(int n){int x;Stack<Integer> stack = new Stack<>();while(n>0){x=n%8;stack.push(x);n/=8;}while(!stack.empty()){int num = stack.pop();System.out.format("%d",num);}}

和二进制转换类似,不多赘述

十六进制怎么转化为八进制呢?

    public void Hex2Oct(String n) {int hex2dex = 0;int reIndex = 0;/*十六进制转十进制*/for (int i = n.length()-1; i >= 0; i--) {if(Character.isDigit(n.charAt(i))&&Integer.parseInt(String.valueOf(n.charAt(i))) >= 0 &&Integer.parseInt(String.valueOf(n.charAt(i))) <= 9){hex2dex += Integer.parseInt(String.valueOf(n.charAt(i))) * Math.pow(16, reIndex);} else {switch (n.charAt(i)) {case 'A':hex2dex += 10 * Math.pow(16, reIndex);break;case 'B':hex2dex += 11 * Math.pow(16, reIndex);break;case 'C':hex2dex += 12 * Math.pow(16, reIndex);break;case 'D':hex2dex += 13 * Math.pow(16, reIndex);break;case 'E':hex2dex += 14 * Math.pow(16, reIndex);break;case 'F':hex2dex += 15 * Math.pow(16, reIndex);break;}}reIndex++;}//十进制转八进制Dex2Oct(hex2dex);}

这里说实话,我个人觉得写得很啰嗦,希望能提出改进意见,主要是在char转换位int的时候有些麻烦

上面的算法分为两个部分:1、十六进制字符串转换为对应的十进制,完成了从字符串到数字的转换

                                       2、十进制转换为八进制

首先是逐个解析十六进制字符串,采用倒序循环的方式。

同时设置一个从0开始递增的辅助变量reIndex,帮助算法完成对最后一个字符的乘以16的N次方的行为。

解析的时候,首先判断这个字符串是不是一个数字型比如‘9’:

  • 若是,对这个字符转换为数字9之后,乘以相应的16的N次方;
  • 若不是,对这个数字单独辨识,必定是ABCDEF其中一个,在对这些数字表示的十进制数值进行运算操作。

得到十六进制转换的十进制数字之后,对这个数字进行上面已经完成的十进制转八进制的运算,只要传入数字即可获得答案。

总结

  1. 算法特点,利用栈的特点解决进制转换很方便
  2. 转换出来的二进制没有前缀00...

 

贴完整代码:

样例输入:先输入十进制转换二进制的十进制数字:比如15

转换完成之后输入一个16进制字符,转换为8进制

import java.util.Scanner;
import java.util.Stack;
/*** Page Description:* User: Yelihu* Date: 2018-12-19* Time: 上午 9:16* Function:*/
public class Main {public void Dex2Bin(int n){int x;Stack<Integer> stack = new Stack<>();while(n>0){x=n%2;stack.push(x);n/=2;}while(!stack.empty()){int num = stack.pop();System.out.format("%d",num);}}public void Dex2Oct(int n){int x;Stack<Integer> stack = new Stack<>();while(n>0){x=n%8;stack.push(x);n/=8;}while(!stack.empty()){int num = stack.pop();System.out.format("%d",num);}}public void Hex2Oct(String n) {int hex2dex = 0;int reIndex = 0;/*十六进制转十进制*/for (int i = n.length()-1; i >= 0; i--) {if(Character.isDigit(n.charAt(i))&&Integer.parseInt(String.valueOf(n.charAt(i))) >= 0 &&Integer.parseInt(String.valueOf(n.charAt(i))) <= 9){hex2dex += Integer.parseInt(String.valueOf(n.charAt(i))) * Math.pow(16, reIndex);} else {switch (n.charAt(i)) {case 'A':hex2dex += 10 * Math.pow(16, reIndex);break;case 'B':hex2dex += 11 * Math.pow(16, reIndex);break;case 'C':hex2dex += 12 * Math.pow(16, reIndex);break;case 'D':hex2dex += 13 * Math.pow(16, reIndex);break;case 'E':hex2dex += 14 * Math.pow(16, reIndex);break;case 'F':hex2dex += 15 * Math.pow(16, reIndex);break;}}reIndex++;}//十进制转八进制Dex2Oct(hex2dex);}public static void main(String[] args) {Main main = new Main();Scanner sc = new Scanner(System.in);int n = sc.nextInt();//十进制转二进制main.Dex2Bin(n);Scanner sc1 = new Scanner(System.in);String str1 = sc1.nextLine();//十六进制转八进制main.Hex2Oct(str1);}
}

 


http://chatgpt.dhexx.cn/article/rWKQDA8N.shtml

相关文章

Java 3种方法实现进制转换

由其他进制转换为十进制比较简单&#xff0c;下面着重谈一谈十进制如何化为其他进制。 1.使用Java带有的方法Integer&#xff0c;最简单粗暴了&#xff0c;代码如下 //使用java提供的方法//但仅局限于比较常用的二进制、八进制、十六进制public static String trans1(int num…

Java实现十进制与二进制互相转换

目录 前言十进制转二进制正整数转二进制小数转换成二进制代码实现 二进制转十进制代码实现 BigInteger概念运用 前言 Java有哪些工具类可以实现十进制与二进制之前的转换呢&#xff1f;欲知详情&#xff0c;请看下文分解。 十进制转二进制 正整数转二进制 除2取余&#xff0c;…

Java 中的进制转换

前言 所谓进制转换&#xff0c;就是人们利用符号来计数的方法。进制转换由一组数码符号和两个基本因素“基数”和“位权”所构成。其中基数是指进位计数制中所采用的数码的个数&#xff0c;逢 n 进 1 中的 n 就是基数。而位权则指的是进位制中每一个固定位置所对应的单位制&am…

Java十进制转换为二进制

Java十进制到二进制转换的3种不同方法。 1. Integer.toString&#xff08;&#xff09;方法 我们可以使用Integer类的toString&#xff08;&#xff09;方法将十进制数转换为二进制数。此方法有两个参数&#xff0c;第一个参数是十进制数&#xff0c;第二个参数是我们要转换的基…

Java 菜鸟入门 | 常用进制转换

前言 所谓进制转换&#xff0c;就是人们利用符号来计数的方法。进制转换由一组数码符号和两个基本因素“基数”和“位权”所构成。其中基数是指进位计数制中所采用的数码的个数&#xff0c;逢 n 进 1 中的 n 就是基数。而位权则指的是进位制中每一个固定位置所对应的单位制&am…

Java进制转换(二进制、八进制、十进制、十六进制)

在Java编程中&#xff0c;经常需要进行不同进制之间的转换&#xff0c;包括二进制、八进制、十进制和十六进制。本篇博文将详细介绍如何在Java中实现这些进制之间的转换。 目录 一、十进制与其他进制转换1. 十进制转二进制2. 十进制转八进制3. 十进制转十六进制 二、其他进制与…

java进制转换方法

一、十进制向二、八、十六进制的转换 方法一&#xff1a; Integer.toBinaryString(i)表示十进制转为二进制 Integer.toOctalString(i)表示十进制转为八进制 Integer.toHexString(i)表示十进制转为十六进制 public static void main(String[] args) {String num1 Integer.toBi…

Quartz定时任务框架(一):概述和Job、JobDetail详解

文章目录 Quartz定时任务框架核心概念Hello World 入门 深入学习原理概述Job和JobDetailJobDataMapJob实例Job的数据状态和并发Job的其它特性 Quartz定时任务框架 核心概念 JobJobDetailTriggerScheduler Job: 既然是定时任务&#xff0c;任务任务对吧&#xff0c;job就是你…

struts2+quartz定时任务

最近有需求要写一个定时任务 目的是更新一些员工/人员与部门之间的关系 项目用的是struts2 当我加了spring的jar包之后写了一个定时任务 项目经理不让用spring 就修改一下 这次贴个全的 下面是任务类 package com.timetask.action; import java.io.BufferedWriter; import…

Quartz定时任务框架使用教程详解

Quartz定时任务框架学习 什么是QuartzQuartz依赖引入使用 QuartzQuartz API&#xff0c;Jobs和TriggersJob 和 Trigger为什么既有 Job&#xff0c;又有 Trigger 呢&#xff1f;Key Job与JobDetail介绍为什么设计成JobDetail Job&#xff0c;不直接使用JobJobDataMapJob实例Job…

quartz定时任务不执行

quartz定时任务执行一段时间不执行的原因 数据库表QRTZ_TRIGGERS 里的TRIGGER_STATE 字段的值自动修改为ERROR了 ,quartz定时任务是不扫描这种ERROR情况. 之所以出现ERROR 原因在于job里有bug,导致quartz自动将状态改变,然后quartz不执行ERROR状态的job. 1.查找原因 原因如下图…

SpringBoot结合Quartz实现定时任务

《从零打造项目》系列文章 工具 比MyBatis Generator更强大的代码生成器 ORM框架选型 SpringBoot项目基础设施搭建SpringBoot集成Mybatis项目实操SpringBoot集成MybatisPlus项目实操SpringBoot集成Spring Data JPA项目实操 数据库变更管理 数据库变更管理&#xff1a;Liquibase…

Quartz定时任务不定时执行

请移步&#xff1a; https://editor.csdn.net/md/?articleId126933515 手动执行才执行。 cron表达式是 1分钟执行3次&#xff0c;一直正常的。 cron "0 */20 * * * ?"依次报错&#xff1a; 后定时任务不再执行了。 手动触发可以正常执行。 Job taskJob (Job…

Springboot 使用quartz 定时任务 增删改查

前段时间公司项目用到了 定时任务 所以写了一篇定时任务的文章 &#xff0c;浏览量还不错 &#xff0c; Springboot 整合定时任务 ) 所以就准备写第二篇&#xff0c; 如果你是一名Java工程师&#xff0c;你也可以会看到如下的页面 &#xff0c;去添加定时任务 定时任务展示 :…

JAVA - Quartz 定时任务_启动原理

JAVA - Quartz 定时任务_启动原理 前言 在开发过程中&#xff0c;我们会用定时任务来执行一些操作&#xff0c;例如定时去捞取流水重试业务、定时去消息中间件获取消息等等相关需求 简单的定时任务实现可以借助Spring提供的 Scheduled 注解 详细看 Spring 原理之 Scheduled …

如何应用quartz定时任务?

Quartz可以用来做什么&#xff1f; Quartz是一个强大任务调度框架&#xff0c;我工作时候会在这些情况下使用到quartz框架&#xff0c;当然还有很多的应用场景&#xff0c;在这里只列举2个实际用到的 餐厅系统会在每周四晚上的22点自动审核并生成报表人事系统会在每天早晨8点…

Quartz定时任务基础学习

Quartz基础笔记 前言 1、什么是Quartz Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目。 2、Quartz的运行环境是什么&#xff1f; Quartz可以运行嵌入在一个独立式应用程序Quartz可以在应用服务器或者Servlet容器实例化&#xff0c;并且参与事务Quartz可…

Quartz定时任务

Java实现定时任务的方式 一、线程等待&#xff08;不建议使用&#xff0c;任务复杂时存在内存泄露风险&#xff09; Thread myThread new Thread(new Runnable() {Overridepublic void run() {while (true) {System.out.println("TestThreadWait is called!");try…

java定时任务Quartz整理

目录 一、Quartz介绍 二、Quartz的组成 三、使用java实现一个简单的Quartz例子 四、使用Springboot整合Quartz定时任务框架 五、使用Springbootmybatis整合Quartz定时任务框架实现定时向数据库插入一条数据 六、总结 七、参考资料 一、Quartz介绍 quartz是一种基于java…

Quartz之定时任务

一 基础概念 1.什么是Quartz? Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目&#xff0c;完全由Java开发&#xff0c;可以用来执行定时任务&#xff0c;类似于 java.util.Timer。但是相较于Timer&#xff0c; Quartz增加了很多功能&#xff1a;(1).持久性…