题目描述
一个整数如果按从低位到高位的顺序,奇数位 (个位、百位、万位⋯ ) 上的数字是奇数,偶数位 (十位、千位、十万位 ⋯ ) 上的数字是偶数,我们就称之为 “好数”。 给定一个正整数 N,请计算从 1 到 N 一共有多少个好数。 输入格式 一个整数N。 输出格式 一个整数代表答案。
代码
# 定义一个函数 is_good,用于判断一个数是否为“好数”
def is_good_number(a):
# 当 a 大于 0 时,逐位检查数字
while a > 0:
# 检查当前个位数字(最右边的数字)
if a % 2 != 0:
# 如果个位数字是奇数,将 a 除以 10 以去掉个位数字,继续检查下一位
a = a // 10
else:
# 如果个位数字是偶数,不符合“好数”的定义,直接跳出循环
break
# 检查当前十位数字(新的最右边的数字,因为之前已经去掉了个位数字)
if a % 2 == 0:
# 如果十位数字是偶数,将 a 除以 10 以去掉十位数字,继续检查下一位
a = a // 10
else:
# 如果十位数字是奇数,不符合“好数”的定义,直接跳出循环
break
# 循环结束后,如果 a 变为 0,说明整个数字都符合“好数”的定义
if a == 0:
return True
else:
# 如果 a 不为 0,说明在检查过程中遇到了不符合“好数”定义的数字
return False
# 从用户输入中获取一个整数 n
n = int(input())
# 初始化计数器 cnt,用于统计从 1 到 n 中“好数”的数量
cnt = 0
# 遍历从 1 到 n 的所有整数
for i in range(1, n + 1):
# 调用 is_good 函数判断当前整数 i 是否为“好数”
if is_good(i):
# 如果是“好数”,计数器 cnt 加 1
cnt += 1
# 打印从 1 到 n 中“好数”的数量
print(cnt)