• 进制转换(牛客)(Java语言)


    题目描述

    描述

    给定一个十进制数M,以及需要转换的进制数N。将十进制数M转化为N进制数

    输入描述:
    输入为一行,M(32位整数)、N(2 ≤ N ≤ 16),以空格隔开。

    输出描述:
    为每个测试实例输出转换后的数,每个输出占一行。如果N大于9,则对应的数字规则参考16进制(比如,10用A表示,等等)

    示例1

    输入:7 2

    输出:111

    解题

    分析

    解题思路

    举例1:十进制123转换为十进制数。
    第一步:123%10 = 3(个位数)
    第二步:123/10 = 12,12%10 = 2(十位数)
    第三步:12/10 = 1, 1%10 = 1(百位数)
    实际输出为321,所以我们还要把这个数字反转过来。

    举例2:十进制88转换为八进制数。
    第一步:88%8 = 0(低位数)
    第二步:88/8 = 11, 11%8 = 3(中位数)
    第三步:11/8 = 1, 1%8 = 1(高位数)
    实际输出为031,把数字反转过来为八进制数130。

    易错点

    1. 当输入要进制转换的十进制数为负数时。
      解决办法:当为负数的时候先转化为正数,最后再加上负号。最后为了识别负号,就要加上一个标志位flag。在负数转化为正数时,flag记录一下。
    2. 当进制超过10进制时,用A、B、C、D这样的字符代替。
      解决办法:设置一个“0123456789ABCDEF“字符串表,把余数当做下标,从这个字符串表中提取数字。
    3. 当输入要进制转换的十进制数为0时,输出0。
      解决办法:这个情况要单独考虑,直接判断要转化的数是否为0,如果为0直接输出0。

    代码

    import java.util.*;
    
    public class Main{
        public static void main(String[] args){
            Scanner sc = new Scanner(System.in);
            int num1 = sc.nextInt();
            int num2 = sc.nextInt();
            StringBuffer str = new StringBuffer();   //使用StringBuffer是为了方便添加字符串。
            String string = "0123456789ABCDEF";   //定义一个字符串表,为了解决进制超过10的情况。
            boolean flag = false;   //定义一个标志位,为了记录这个数是否为负数。
            if(num1 == 0){   //判断这个数,是否为0,为0直接输出0。
                System.out.print("0");
                return ;
            }
            if(num1 < 0){    //判断是否为负数。
                num1 = -num1;
                flag = true;
            }
            
            while(num1 != 0){   //主要代码的实现过程。
                str.append(string.charAt(num1%num2));
                num1/=num2;
            }
            
            if(flag){   //如果为负数,在最后加上一个负号。
                str.append('-');
            }
            str.reverse();    //实现字符串的反转。
            System.out.print(str);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
  • 相关阅读:
    基于JAVAWeb的学生宿舍公寓后台管理系统
    Linux应急响应笔记
    Maven安装
    用iPad记笔记?这10款笔记软件让你事半功倍!
    基于 CC2530 的多功能 ZigBee 继电器、开关、传感器和路由器的详细实现与JavaScript编码
    VUE之更换背景颜色
    【Kafka】——Producer
    Spring对JUnit的支持
    K8s — PVC|PV Terminating State
    显卡烤机软件furmark详细烤机教程
  • 原文地址:https://blog.csdn.net/IT_Infector/article/details/125583160