问题描述
数字魔法师小U发现了一种特殊的数字变换魔法。这个魔法可以对一个数字字符串进行"进位"操作。每次操作规则如下:
- 对字符串中的每个数字进行加一操作
- 当某位数字为9时,加一后变成 0,并在前面补 1
例如:
- "798" 经过一次操作变成 "8109"(7→8, 9→0并向前增加一个1, 8→9)
- "999" 经过一次操作变成 "101010"
现在给定一个数字字符串 num_str
(长度为n)和操作次数 k
,请计算经过 k
次操作后得到的最终结果。由于结果可能非常大,请将答案对 1000000007
(10^9 + 7) 取模。
输入
- 第一行包含两个整数 n 和 k(1 ≤ n ≤ 50, 1 ≤ k ≤ 100)
- 第二行包含一个长度为n的数字字符串 num_str,仅由数字0-9组成
返回
- 返回一个整数,表示最终结果对 1000000007 取模后的值
代码
def solution(n: int, k: int, num_str: str) -> int:
# Please write your code here
assert n == len(num_str)
ans = 0
mod = 10 ** 9 + 7
for _ in range(k):
t = ""
for ch in num_str:
t += str(1 + int(ch))
num_str = t
for ch in num_str:
ans = (ans * 10 + int(ch)) % mod
return ans
if __name__ == "__main__":
# You can add more test cases here
print(solution(3, 1, "798") == 8109)
print(solution(3, 3, "798") == 103221)