进制转换:M是32位整数,2<=N<=16.

进制转换:M是32位整数,2<=N<=16.

1.使用Java带有的方法Integer,最简单粗暴了,代码如下

//使用java提供的方法
//但仅局限于比较常用的二进制、八进制、十六进制

1

2

3

4

5

6

7

8

9

10

11

public static String trans1(int num, int radix)

{

  if(radix == 2)

    return Integer.toBinaryString(num);

  else if(radix == 8)

    return Integer.toOctalString(num);

  else if(radix == 16)

    return Integer.toHexString(num);

 

  return null;

}

2.使用数组进行交换,贴码:

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

32

33

34

35

36

37

38

39

40

//使用数组的形式进行转换

  public static void trans2(int num, int radix)

  {

    System.out.println(num+"转成"+radix+"进制数为:");

 

    //创建数组,32位

    char[] arr = new char[32];

 

    //创建参考字符数组

    char[] ch = {

      '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'

    };

 

    //指针,从数组最后开始

    int pos = 32;

 

    //开始循环计算num和radix的商和余数

    while(num > 0)

    {

      arr[--pos] = ch[num % radix];

      num /= radix;

 

      /*

       * 这里是针对二进制、八进制和十六进制进行的移位运算

      arr[--pos] = ch[num&(radix-1)];

      if(radix == 2)

        num >>= 1;

      else if(radix == 8)

        num >>= 3;

      else if(radix == 16)

        num >>= 4;

      */

    }

 

    //输出有效的进制数

    for(int i = pos; i < 32; i++)

      System.out.print(arr[i]);

 

    System.out.println();

  }

3.使用StringBuilder类型,贴码:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

//使用StringBuilder进行转换

  public static String trans3(int num, int radix)

  {

    //使用StringBuilder的reverse方法

    StringBuilder sb = new StringBuilder();

 

    while(num > 0)

    {

      //把除以基数的余数存到缓冲区中

      sb.append(num % radix);

      num /= radix;

    }

 

    return sb.reverse().toString();

  }

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

import java.util.*;

 

 

public class Solution {

    /**

     * 进制转换

     * @param M int整型 给定整数

     * @param N int整型 转换到的进制

     * @return string字符串

     */

    public String solve (int M, int N) {

        if(M == 0) return "0";

        boolean flag = true;

        if(M < 0){

            M = -M;

            flag = false;

        }

        String hex = "0123456789ABCDEF";

        StringBuffer sb = new StringBuffer();

        while(M != 0){

            sb.append(hex.charAt(M%N));

            M /= N;

        }

        return  flag == true ? sb.reverse().toString() : "-"+sb.reverse().toString();

    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值