📜  资质| Wipro模拟测试|问题3(1)

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

资质Wipro模拟测试-问题3

问题描述

你需要实现一个函数,输入一个正整数 n,返回数值范围在 [1,n] 之间且不含数字 7 的所有整数的和。

函数签名
def sum_without_sevens(n: int) -> int:
    pass
输入
  • n:一个正整数,1 <= n <= 10^6
输出
  • 返回所有不含数字 7 的范围在 [1,n] 的整数的和,答案返回需要 mod 1000000007
示例
assert sum_without_sevens(10) == 43
assert sum_without_sevens(20) == 109
assert sum_without_sevens(100) == 4620
解题思路

本题考察的是简单的数学题,可以考虑将数字范围内所有符合要求的数字相加即可。

整体思路是遍历所有 [1, n] 范围内的每个正整数,对每个数字判断其中是否包含数字 7,如果包含则跳过,否则将其加到总计数器中,并对其取模。为了不断判断数字中是否有数字 7,我们可以将数字转换为字符串,然后在字符串中查找 7

代码实现
def sum_without_sevens(n: int) -> int:
    MOD = 1000000007
    ans = 0
    for i in range(1, n+1):
        if '7' in str(i):
            continue
        ans += i
        ans %= MOD
    return ans

在实现过程中需要注意答案需要取模,否则会出现溢出问题。