P10985 [蓝桥杯 2023 国 Python A] 整数变换 题解

· · 题解

P10985 [蓝桥杯 2023 国 Python A] 整数变换 题解

本题是 Python 题

思路分析

显然的,这道题目只考察选手对 Python 的运用,我们可以顺理成章的写出下面的代码。

s = input()
# 输入 s,此时的 s 是字符串
answer = 0
# 初始化答案变量
while s != '0':
    answer += 1
    # 更新答案
    remove = 0
    # 统计每一位的和
    for x in s:
        # 枚举每一个字符
        remove += int(x)
        # 更新每一位的和(必须用 int 将字符串类型转为数字类型)
    s = str(int(s) - remove)
    # 更新字符串,使用 str 将数字类型转为字符串类型
print(answer)
# 输出答案

(你知道为什么这个代码不在代码实现板块中吗?)

得益于 Python 的巨大常数,同时根据常识,字符串运算的常数是数字的数倍,这段代码 TLE 了……

而 PyPy3 对整数的运算有过优化(好像是不超过存储范围就先用类似于 C++ 的 long long 存,放不下了再用高精度,具体忘了),所以我们可以将其全程更改为使用整数计算即可通过。

代码实现

代码细节针对语言语法薄弱的同学已经写在了注释里。

s = int(input())
# 输入 s,并把 s 从字符串转为数字
answer = 0
# 初始化答案变量
while s != 0:
    answer += 1
    # 更新答案
    remove = 0
    # 统计每一位的和
    n = s
    # 使用 int 将 s 转为数字类型
    while n != 0:
        # 枚举 n 的每一位
        remove += n % 10
        # 更新和
        n //= 10
        # 重点:Python 中的除法符号 / 是浮点数(小数)的除法,整除符号是 //
    s -= remove
    # 将原数减去每一位的和
print(answer)
# 输出答案