📜  门|门 IT 2007 |第 53 题(1)

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

门|门 IT 2007 | 第 53 题

这道编程题是门|门 IT 2007比赛中的第53题。本题难度适中,适合初学者和进阶者练习。本题需要编写一个程序,实现输入一个整数n,输出从1到n的所有正整数中,数字7出现的次数。

题目描述

给定一个正整数n(1<=n<=10000),请编写程序计算从1到n的所有正整数中,数字7出现的次数。

输入格式

一个正整数n。

输出格式

数字7出现的次数。

样例输入
30
样例输出
4
解题思路

该题的难点在于如何统计从1到n的所有正整数中数字7出现的次数。一种简单的方法是将从1到n的每个数字转换为字符串,然后逐一遍历每个字符串中的字符,计算数字7出现的次数。代码如下:

def count_seven(n):
    cnt = 0
    for i in range(1, n+1):
        for c in str(i):
            if c == '7':
                cnt += 1
    return cnt

另一种方法是将n拆分为若干位,逐一统计每一位上数字7出现的次数,最后汇总计算。代码如下:

def count_seven(n):
    cnt = 0
    m = n
    base = 1
    while m > 0:
        d = m % 10
        m //= 10
        cnt += m * base
        if d > 7:
            cnt += base
        elif d == 7:
            cnt += n % base + 1
        base *= 10
    return cnt
Markdown代码

以下是该题的Markdown代码:

# 门|门 IT 2007 | 第 53 题

这道编程题是门|门 IT 2007比赛中的第53题。本题难度适中,适合初学者和进阶者练习。本题需要编写一个程序,实现输入一个整数n,输出从1到n的所有正整数中,数字7出现的次数。

## 题目描述

给定一个正整数n(1<=n<=10000),请编写程序计算从1到n的所有正整数中,数字7出现的次数。

## 输入格式

一个正整数n。

## 输出格式

数字7出现的次数。

## 样例输入

30


## 样例输出

4


## 解题思路

该题的难点在于如何统计从1到n的所有正整数中数字7出现的次数。一种简单的方法是将从1到n的每个数字转换为字符串,然后逐一遍历每个字符串中的字符,计算数字7出现的次数。代码如下:

```python
def count_seven(n):
    cnt = 0
    for i in range(1, n+1):
        for c in str(i):
            if c == '7':
                cnt += 1
    return cnt

另一种方法是将n拆分为若干位,逐一统计每一位上数字7出现的次数,最后汇总计算。代码如下:

def count_seven(n):
    cnt = 0
    m = n
    base = 1
    while m > 0:
        d = m % 10
        m //= 10
        cnt += m * base
        if d > 7:
            cnt += base
        elif d == 7:
            cnt += n % base + 1
        base *= 10
    return cnt