📌  相关文章
📜  给定范围内最后 K 位数字相等的整数个数(1)

📅  最后修改于: 2023-12-03 14:56:55.078000             🧑  作者: Mango

给定范围内最后 K 位数字相等的整数个数

给定一个正整数n和K,求在[1, n]范围内最后K位数字相等的整数个数。

解法

我们先考虑最简单的情况:对于K=1,所有一位数中,1到n中尾数相等的数的个数显然就是n除以10的余数。比如如果n=25,那么一位数中尾数等于5的数有5个,即5、15、25、35、45。

对于一般情况的K,我们可以发现,在尾数相等的情况下,最小的数是K,最大的数是n,而且它们之间的差是K×10^m,其中m是不小于K的最小整数,满足10^m大于等于n。比如,如果n=37,K=2,则最小的数是20,最大的数是32,它们之间的差是12=2×10^1。

因此,在[1, n]范围内最后K位数字相等的整数个数就是(n-K)÷(10^K-1)+1(注:÷代表整除,即相除并向下取整)。

代码实现
def last_k_digits_eq_count(n, k):
    """
    给定一个正整数n和K,求在[1, n]范围内最后K位数字相等的整数个数。
    """
    m = 10 ** k
    return (n - k) // (m - 1) + 1
测试样例
assert last_k_digits_eq_count(25, 1) == 5
assert last_k_digits_eq_count(37, 2) == 2
assert last_k_digits_eq_count(100, 3) == 1