题解 | #进制转换#

进制转换

https://www.nowcoder.com/practice/2cc32b88fff94d7e8fd458b8c7b25ec1?tpId=117&tqId=37836&rp=1&ru=/exam/oj&qru=/exam/oj&sourceUrl=%2Fexam%2Foj%3Fpage%3D1%26pageSize%3D50%26search%3D%25E8%25BF%259B%25E5%2588%25B6%26tab%3D%25E7%25AE%2597%25E6%25B3%2595%25E7%25AF%2587%26topicId%3D117&difficulty=undefined&judgeStatus=undefined&tags=&title=%E8%BF%9B%E5%88%B6

思路

十进制转换成任何进制的逻辑相同,先把大体逻辑写出来,再一步一步按题目要求优化

step1:写出十进制转换成其他进制的逻辑

StringBuilder res = new StringBuilder(); //用SpringBuilder创立动态字符串
while (M != 0) {
	int r = M % N; // 余数
    res.insert(0, r); // insert方法将r插入到第0个位置
    M /= N;
}

step2:N大于10的情况

if (N >= 10) {
    if (r >= 10) { //r>10的变成大写字母,<10的直接插入到字符串开头
        //操作大于10的余数,'A' 表示此位为 10 , 'B' 表示此位为 11 
        int carry = r - 10;
        char tmp = 'A';
        for (int i = 0; i < carry; i++) {
            tmp++;
        }
    res.insert(0, tmp);
    } else {
        res.insert(0, r);
    }

} else {
    res.insert(0, r);
}

step3:M是负数的情况

boolean tag = false;
if(M < 0){
    tag = true;
    M = -M;
}
if (tag == true) {
    res.insert(0, '-'); //写在代码最后,如果M是负数则在字符串最前面加-
}

完整代码

public String solve (int M, int N) {
​
    StringBuilder res = new StringBuilder();
    if (M == 0) {
        return "0";
    }
    boolean tag = false;
    if(M < 0){
        tag = true;
        M = -M;
    }
    while (M != 0) {
        int r = M % N; // 余数
        if (N >= 10) {
            if (r >= 10) {
                int carry = r - 10;
                char tmp = 'A';
                for (int i = 0; i < carry; i++) {
                    tmp++;
                }
                res.insert(0, tmp);
            } else {
                res.insert(0, r);
            }
​
        } else {
            res.insert(0, r);
        }
        M /= N;
    }
    if (tag == true) {
        res.insert(0, '-');
    }

    return res.toString();
}

总结

  1. StringBuilding很方便创建动态的字符串,并能操作,基本操作如图: alt
  2. 字符大小写还可以用toUpperCase()方法:
String str = new String("abc DEF");//创建字符串str
String newstr = str.toLowerCase();//使用toLowerCase()方法实现小写转换
String newstr2 = str.toUpperCase();//使用toUpperCase()方法实现大写转换
  1. 用 Math.abs(num) 方法可以取num的绝对值。
李咸鱼刷题小结 文章被收录于专栏

总结一下我的刷题过程、错误以及学到的知识

全部评论

相关推荐

03-16 22:00
武汉大学 C++
幸福的小熊猫想要offer:我阿里投的 c++岗,面试官说自己是做 java 的,c++这辈子才有了
点赞 评论 收藏
分享
03-12 13:51
南昌大学 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务