k进制表示下的各位数字和
给你一个整数 n(10 进制)和一个基数 k ,请你将 n 从 10 进制表示转换为 k 进制表示,计算并返回转换后各位数字的 总和 。
转换后,各位数字应当视作是 10 进制数字,且它们的总和也应当按 10 进制表示返回。
思路:集合 + 短除法
class Solution {
public int sumBase(int n, int k) {
ArrayList<Integer> list = new ArrayList<>();
while(n >= k){
int num = n / k;
list.add(n % k);
n = num;
}
list.add(n);//每次存放返回后的数字
int sum = 0;
for (Integer num: list) {
sum += num;
}
return sum;
}
}
数字转换为16进制
给定一个整数,编写一个算法将这个数转换为十六进制数。对于负整数,我们通常使用 补码运算 方法。(此题copy题解,详情可去自行查看)
注意:
十六进制中所有字母(a-f)都必须是小写。
十六进制字符串中不能包含多余的前导零。如果要转化的数为0,那么以单个字符'0'来表示;对于其他情况,十六进制字符串中的第一个字符将不会是0字符。
给定的数确保在32位有符号整数范围内。
不能使用任何由库提供的将数字直接转换或格式化为十六进制的方法。
/***
位运算使用
*/
class Solution {
public String toHex(int num) {
if (num == 0) {
return "0";
}
StringBuffer sb = new StringBuffer();
for (int i = 7; i >= 0; i --) {
int val = (num >> (4 * i)) & 0xf;
if (sb.length() > 0 || val > 0) {
char digit = val < 10 ? (char) ('0' + val) : (char) ('a' + val - 10);
sb.append(digit);
}
}
return sb.toString();
}
}
时间复杂度:O(k)
七进制数
给定一个整数 num,将其转化为 7 进制,并以字符串形式输出。
class Solution {
public String convertToBase7(int num) {
StringBuilder sb = new StringBuilder();
if (num == 0) {
return "0";
}
boolean flag = num < 0;
num = Math.abs(num);
while (num != 0) {
sb.append(num % 7);
num /= 7;
}
if (flag){
sb.append("-");
}
return sb.reverse().toString();
}
}