目录
小试牛刀
七进制求和
给定一个整数
num
,将其转化为 7 进制,并以字符串形式输出。
class Solution {
public String convertToBase7(int num) {
StringBuffer sb = new StringBuffer();
if (num == 0) {
sb.append(0);
return sb.substring(0);
}
int flag = num < 0 ? 0 : 1;
num = Math.abs(num);
while (num > 0) {
sb.append(num % 7);
num = num / 7;
}
if (flag == 0) {
sb.append("-");
}
return sb.reverse().substring(0);
}
}
略加改造
K进制表示下的各位数字求和
给你一个整数
n
(10
进制)和一个基数k
,请你将n
从10
进制表示转换为k
进制表示,计算并返回转换后各位数字的 总和 。转换后,各位数字应当视作是
10
进制数字,且它们的总和也应当按10
进制表示返回。
class Solution {
public int sumBase(int n, int k) {
int sum = 0;
while (n > 0) {
sum += n % k;
n = n / k;
}
return sum;
}
}
实际应用
Excel表列名称
给你一个整数
columnNumber
,返回它在 Excel 表中相对应的列名称。例如:
A -> 1 B -> 2 C -> 3 ... Z -> 26 AA -> 27 AB -> 28 ...示例 1:
输入:columnNumber = 1 输出:"A"示例 2:
输入:columnNumber = 28 输出:"AB"示例 3:
输入:columnNumber = 701 输出:"ZY"示例 4:
输入:columnNumber = 2147483647 输出:"FXSHRXW"
class Solution {
public String convertToTitle(int columnNumber) {
StringBuffer sb = new StringBuffer();
while(columnNumber > 0) {
columnNumber--;
int num = columnNumber % 26;
char ch = (char) ('A' + num);
sb.append(ch);
columnNumber /= 26;
}
sb.reverse();
return sb.substring(0);
}
}
往年真题(第十四届蓝桥杯java b组)
哈沙德数是指在某个固定的进位制当中,可以被各位数字之和整除的正整 数。
例如 126 是十进制下的一个哈沙德数,因为 (126) 10 mod (1+2+6) = 0 ; 126 也是八进制下的哈沙德数,因为 (126) 10 = (176) 8 , (126) 10 mod (1 + 7 + 6) = 0 ; 同时 126 也是 16 进制下的哈沙德数,因为 (126) 10 = (7 e ) 16 , (126) 10 mod (7 + e ) = 0 。小蓝认为,如果一个整数在二进制、八进制、十进制、十六进制下均为 哈沙德数,那么这个数字就是幸运数字,第 1 至第 10 个幸运数字的十进制表示 为:1 , 2 , 4 , 6 , 8 , 40 , 48 , 72 , 120 , 126 . . . 。
现在他想知道第 2023 个幸运数 字是多少?你只需要告诉小蓝这个整数的十进制表示即可。
public class luckNumber {
public static void main(String[] args) {
int j = 0;
for (int i = 1; i < Integer.MAX_VALUE; i++) {
if (baseConvert(i)) {
j++;
if (j == 2023) {
System.out.println(i);
break;
}
}
}
}
public static boolean baseConvert(int n) {
int sum = 0;
int x = n;
int[] arr = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
// 十进制
while (x > 0) {
sum += x % 10;
x = x / 10;
}
if (n % sum != 0) {
return false;
}
sum = 0;
x = n;
//二进制
while (x > 0) {
sum += x % 2;
x = x / 2;
}
if (n % sum != 0) {
return false;
}
sum = 0;
x = n;
// 八进制
while (x > 0) {
sum += x % 8;
x = x / 8;
}
if (n % sum != 0) {
return false;
}
sum = 0;
x = n;
// 十六进制
while (x > 0) {
sum += arr[x % 16];
x = x / 16;
}
if (n % sum != 0) {
return false;
}
return true;
}
}
上述内容如果有错误的地方,希望大佬们可以指正。我一直在学习的路上,您的帮助使我收获更大!觉得对您有帮助的话,还请点赞支持!我也会不断更新文章!