编程题 进制转换(Java实现)

article/2023/6/4 16:35:57

🎉🎉🎉点进来你就是我的人了
博主主页:🙈🙈🙈戳一戳,欢迎大佬指点!

人生格言:当你的才华撑不起你的野心的时候,你就应该静下心来学习!

欢迎志同道合的朋友一起加油喔🦾🦾🦾
目标梦想:进大厂,立志成为一个牛掰的Java程序猿,虽然现在还是一个🐒嘿嘿
谢谢你这么帅气美丽还给我点赞!比个心



 进制转换

解题思路: 将一个十进制的数转化成N进制,我们最容易想到就是除商逆向取余法:除以n(商),逆向取余数,直到商为0为止,我们将得到的余数逆序输出就可以得到我们想要的N进制!

怎样将输出的结果逆序拿到最容易想到有两种方法,第一种是递归,第二种就是栈!

此处我们采用的是栈这种数据结构给大家讲解:

需要注意的是输入的十进制数可能为负数,可以定义一个标志位flag用于判断这个数的状态!

默认(正数)为false!当发现这个数是负数后,将其转化为正数,并将flag置为true表示该数为负数,然后在代码末尾加个if语句判断一下,如果标志位为true,就在栈里面添加个负号,最后将栈里面的数据依次弹出来输出即可!(同时别忘记处理n>9时,后面的余数要用字符表示,参考16进制)

代码演示:

import java.util.*;public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);while (in.hasNextInt()) { int m = in.nextInt();int n = in.nextInt();//我们用除商(商就是n)取余法求转换后的n进制,逆向取余数//此处我们用栈先进后出的特性,逆向拿到想要的余数Deque<Object> stack = new ArrayDeque<>();boolean falg =false; //判断输入的这个数是不是负数if(m < 0) {m = -m;falg =true;}//如果m比n小就不需要转换了if (m < n) {if (m <= 9) {stack.push(m);} else if (m == 10) {stack.push("A");} else if (m == 11) {stack.push("B");} else if (m == 12) {stack.push("C");} else if (m == 13) {stack.push("D");} else if (m == 14) {stack.push("E");} else if (m == 15) {stack.push("F");}} else {//这个循环通过除商(n)依次拿到n进制的每个数while (m != 0) {    int result = m % n;if (result <= 9) {stack.push(result);} else if (result == 10) {stack.push("A");} else if (result == 11) {stack.push("B");} else if (result == 12) {stack.push("C");} else if (result == 13) {stack.push("D");} else if (result == 14) {stack.push("E");} else if (result == 15) {stack.push("F");}m =m/n;}}if(falg == true) {   //如果是负数加个负号stack.push("-");}while(!stack.isEmpty()) {System.out.print(stack.poll());}}}
}

大家有没有这样的代码是不是过于冗余呢,可不可以继续优化呢?

我们可以定义一个字符串保存取余后需要入栈的数字和字符,直接将取余后的数

作为这个字符串的下标,通过下标依次从这个字符串里面取出需要的数字或者字符

存进栈里面,就可以减少大量的if else判断了!

下面是代码演示:

import java.util.*;public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);while (in.hasNextInt()) { int m = in.nextInt();int n = in.nextInt();//我们用除商(商就是n)取余法求转换后的n进制,逆向取余数//此处我们用栈先进后出的特性,逆向拿到想要的余数Deque<Object> stack = new ArrayDeque<>();//定义一个字符串,每次取余后从这个字符串里取出对应的数String str ="0123456789ABCDEF";boolean falg =false; //判断输入的这个数是不是负数if(m < 0) {m = -m;falg =true;}//如果m为0不需要转换if(m == 0) {stack.push("0");}while(m != 0) {stack.push(str.charAt(m%n));m /=n;}if(falg == true) {   //如果是负数加个符号stack.push("-");}while(!stack.isEmpty()) {System.out.print(stack.poll());}}}
}

http://www.ngui.cc/article/show-1007724.html

相关文章

4005. 取石子游戏

Powered by:NEFU AB-IN Link 文章目录4005. 取石子游戏题意思路代码4005. 取石子游戏 题意 Alice 和 Bob 正在玩一个取石子游戏。 共有 n个石子&#xff0c;双方轮流采取行动。 每当轮到一人行动时&#xff0c;该名玩家需要从石子堆中取走恰好 1或 2或 k个石子。 如果轮到一人…

一维与二维前缀和(蓝桥杯复习+例题讲解+模板c++)

文章目录前缀和二维前缀和总结3956. 截断数组99. 激光炸弹文章首发于&#xff1a; My Blog 欢迎大佬们前来逛逛前缀和 前缀和是一种常见的算法&#xff0c;用于快速计算数组中某一段区间的和。前缀和的思想就是预处理出数组中前缀和&#xff0c;然后用后缀和减去前缀和&#x…

【零基础入门SpringBoot2】—— Web开发_3

一、Web原生组件注入 如何向SpringBoot中注入Web的原生组件&#xff1f; 1、使用Servlet API &#xff08;1&#xff09;Servlet原生组件 创建一个Servlet类&#xff0c;让它继承原生的Servlet的实现类 HttpServlet &#xff0c;使用WebServlet注解指定我们的请求&#xff0c;…

MobaXterm 链接Linux Ubuntu

MobaXterm 链接Linux Ubuntu 1.查看是否安装 openssh-server sudo apt-get install open-server2.开启ssh服务 sudo /etc/init.d/ssh start3.查看虚拟机的IP ifconfig5.打开MobaXterm 将ip输入即可 如果传输文件&#xff0c;选择SFTP&#xff0c;步骤和上面一样

c++加解密算法总结

不可逆加密 概述 单向加密&#xff0c;主要是对明文的保密和摘要提取。算法包括MD5、SHA、HMAC等。 特点 压缩性&#xff1a;任意长度的数据&#xff0c;单向加密后长度都是固定的&#xff1b;抗修改性&#xff1a;对原数据进行任何改动&#xff0c;哪怕只修改1个字节&…

JAVA Session会话 Thymeleaf - 视图模板技术配置步骤

JAVAWebSession会话会话跟踪技术session保存作用域Thymeleaf - 视图模板技术配置过程Session会话 HTTP是无状态的&#xff1a;服务器无法区分这两个请求是同一个客户端发过来的&#xff0c;还是不同的客户端发过来的 现实问题&#xff1a;第一次请求是添加商品到购物车&#x…

model.train()、model.eval()什么时候用

model.train() 在使用 pytorch 构建神经网络的时候&#xff0c;训练过程中会在程序上方添加一句model.train()&#xff0c;作用是 启用 batch normalization 和 dropout 。 如果模型中有BN层&#xff08;Batch Normalization&#xff09;和 Dropout &#xff0c;需要在训练时…

Mac M1/Intel 芯片 Nginx+PHP开发环境配置——初探(一)

最近因为新买Mac M系列芯片笔记本&#xff0c;一直也没搭建过PHP的开发环境&#xff0c;花了一点时间特意在本机做了一次环境搭建测试具体如下。开始之前&#xff0c;需要安装一些工具来完成配置&#xff0c;工具列表如下:XcodeVS CodeHomebrewOpenSSL & wgetMySQLPostgres…

Spring《二》bean的实例化与生命周期

&#x1f34e;道阻且长&#xff0c;行则将至。&#x1f353; 目录一、bean实例化&#x1f34d;1.构造方法 ***2.静态工厂 *使用工厂创建对象实例化bean3.实例工厂 ***使用示例工厂创建对象实例工厂实例化beanFactoryBean二、生命周期&#x1f351;1.生命周期设置2.在main方法使…

Vector - CAPL - 实时时间on *

前面有简单的提到过on message的用法&#xff0c;但是对于整个on *家族来说&#xff0c;on message仅仅这是其中之一&#xff0c;为了能够的了解、学习这个家族的成员&#xff0c;因此做了专门的整理的&#xff0c;将囊括CALP用常用的所有的on *家族成员&#xff0c;并对其进行…