用python编写代码,要求如下:给你一个正整数 n (0< n <1000000),请你输出0到 n 之间"1"出现的次数。例如 n =4时,[1,2,3,4]出现了1个"1",因此输出1 n =12时,[1,2,3,4,5,6,7,8,9,10,11,12]出现了5个"1",因此输出5
时间: 2024-03-11 21:46:47 浏览: 55
好的,我的理解是你需要一个 Python 的函数,输入一个正整数 n,输出 0 到 n 之间 1 出现的次数。我的实现思路是将 n 拆分成若干段,每一段内部 1 出现的次数都是一样的,然后将所有段的 1 出现次数累加即可。下面是代码实现:
```python
def count_ones(n):
"""
计算 0 到 n 之间 1 出现的次数
"""
if n <= 0:
return 0
# 将 n 转为字符串,方便遍历
n_str = str(n)
# 获取 n 的位数
n_len = len(n_str)
# 初始化计数器
cnt = 0
# 遍历每一位
for i in range(n_len):
# 计算当前位数的值
base = 10 ** (n_len - i - 1)
cur = int(n_str[i])
# 计算出当前位左边和右边的数字
left = n // (base * 10)
right = n % base
# 计算当前位 1 出现的次数
if cur == 0:
cnt += left * base
elif cur == 1:
cnt += left * base + right + 1
else:
cnt += (left + 1) * base
return cnt
```
可以使用以下代码进行测试:
```python
print(count_ones(4)) # 1
print(count_ones(12)) # 5
print(count_ones(100)) # 21
```
这个函数的时间复杂度为 O(log n),可以处理比较大的数字。
阅读全文