转化K进制 各位求和 (含真题)

目录

小试牛刀

七进制求和

略加改造

 K进制表示下的各位数字求和

 实际应用

Excel表列名称

往年真题(第十四届蓝桥杯java b组)


小试牛刀

七进制求和

给定一个整数 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进制表示下的各位数字求和

给你一个整数 n10 进制)和一个基数 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;
    }
}

 

          上述内容如果有错误的地方,希望大佬们可以指正。我一直在学习的路上,您的帮助使我收获更大!觉得对您有帮助的话,还请点赞支持!我也会不断更新文章! 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

弘弘弘弘~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值