从十进制到k进制:如何取出每一位数字并求和?

从十进制到k进制:如何取出每一位数字并求和?_第1张图片

本篇博客中,我会以力扣“1837. K 进制表示下的各位数字总和”为例,讲解如何取出一个数k进制表示的每一位。

从十进制到k进制:如何取出每一位数字并求和?_第2张图片
经过审题,我们发现这道题目的关键是如何理解“进制”的概念,尤其是如何取出k进制的每一位。我们先来回忆一下如何取出10进制的每一位数字,即传统的“mod10除10”思路。

我们反复地对数字mod10,以及除以10,就能够得到一个数十进制中的每一位。如123,先123%10=3(取出个位数),接着123/10=12;12%10=2(取出十位数),12/10=1;1%10=1(取出百位数),1/10=0,当得到0时,说明这个整数中的每一位都被我们取完了。

同理,如何取出k进制中的每一位呢?我们只需要反复地mod k,再除以k,就能达到同样的效果了。

int sumBase(int n, int k){
    int ret = 0;
    // 取出k进制中的每一位并求和
    while (n)
    {
        ret += n % k;
        n /= k;
    }

    return ret;
}

从十进制到k进制:如何取出每一位数字并求和?_第3张图片

总结

取出一个整数k进制的每一位的思路:反复mod k(取出某一位),再除以k(把某一位去掉),直到得到0为止。

感谢大家的阅读!

你可能感兴趣的:(力扣刷题,数据结构,算法,leetcode,c语言,力扣)