今日份牛客==进制转换=java不断求余==考虑16进制的表示和正负

题目描述:给定一个十进制数M,以及需要转换的进制数N。将十进制数M转化为N进制数
输入 :7,2
返回值 : “111”

题目不难,要考虑细节,比如10要用A表示,11用B表示,还要小心数字的正负;

  • 就是不断求余的过程,比如17转3进制,

  • 17%3=2,用17/3=5的商继续做被除数,

  • 5%3=2,用5/3=1的商继续做被除数,

  • 1%3=1, 1/3=0,商为0结束,

  • -把所有的余数串起来,2,2,1翻过来122就是所求的三进制=>2 * 3^0 + 2 * 3^1 + 1 * 3 ^2==17

  • char[] index = {‘0’,‘1’,‘2’,‘3’,‘4’,‘5’,‘6’,‘7’,‘8’,‘9’,‘A’,‘B’,‘C’,‘D’,‘E’,‘F’};来映射进制

  • 负数的秋余操作把负数取出,然后按正数操作即可

import java.util.*; 
public class Solution {
    
    
    /**
     * 进制转换
     * @param M int整型 给定整数
     * @param N int整型 转换到的进制
     * @return string字符串
     */
    public String solve (int M, int N) {
    
    
        // write code here
        StringBuffer str = new StringBuffer();
        char[] index = {
    
    '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
        boolean flag = false;
        if(M <0){
    
    
            flag = true;
            M = -M;
        }
        while(M != 0){
    
    
            int remain = M % N;
            str.insert(0,index[remain]);
            M /= N;
        }
        if(flag) str.insert(0,'-');
        return str.toString();
    }
}

猜你喜欢

转载自blog.csdn.net/qq_45531729/article/details/110691622