题解 | #进制转换#
进制转换
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();
}
总结
- StringBuilding很方便创建动态的字符串,并能操作,基本操作如图:
- 字符大小写还可以用toUpperCase()方法:
String str = new String("abc DEF");//创建字符串str
String newstr = str.toLowerCase();//使用toLowerCase()方法实现小写转换
String newstr2 = str.toUpperCase();//使用toUpperCase()方法实现大写转换
- 用 Math.abs(num) 方法可以取num的绝对值。
李咸鱼刷题小结 文章被收录于专栏
总结一下我的刷题过程、错误以及学到的知识