📌  相关文章
📜  最大数字,最大尾数为9,小于N且大于ND(1)

📅  最后修改于: 2023-12-03 15:26:26.001000             🧑  作者: Mango

找到小于N且最大数字、最大尾数为9的数

本题可以通过数学方法来解决,不需要进行穷举。

首先,我们先找到小于N的最大数字为9的数(即数的各位都是9)。假设N的位数为n,则小于N的最大数字为9的数为999...,其中9的数量为n。

其次,我们找到小于N且最大尾数为9的数。我们可以将N的个位数替换为9,然后向前一位寻找最小的数字,使得新数小于原数。如果找不到这样的数字,就将新数的十位数替换为9,再重复上述操作,直到新数小于原数为止。

最后,我们只需返回这两个数中较小的那个即可。

以下是实现代码(使用了python语言):

def find_largest_num(n):
    """
    找到小于n的最大数字为9的数
    """
    digits = len(str(n))
    return int('9'*digits)

def find_largest_9_tail_num(n):
    """
    找到小于n且最大尾数为9的数
    """
    str_n = str(n)
    digits = len(str_n)
    # 获取新数最高位应该是多少
    first_digit = int(str_n[0])+1
    if first_digit >= 10:
        new_digits = digits + 1
        new_num = int('9'*new_digits)
    else:
        new_num = int(str(first_digit) + '9'*(digits-1))
        while new_num >= n:
            # 如果新数大于等于原数,则将十位数替换为9,再尝试
            new_num = int(str(new_num//10) + '9')
    return new_num

def find_num(n):
    """
    找到小于n且最大数字、最大尾数为9的数
    """
    largest_num = find_largest_num(n)
    largest_9_tail_num = find_largest_9_tail_num(n)
    return largest_9_tail_num if largest_9_tail_num < largest_num else largest_num

以上就是本题的解题思路和代码实现。