进制转换(牛客)(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);
    }
}
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT技术博主-方兴未艾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值