版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_41819299/article/details/81174937
一、要求
求从1到n整数的十进制表示中,1出现的次数。
举个例子:1~13中包含1的数字有1、10、11、12、13因此共出现6次。
二、思路及代码
道理蛮复杂的,具体可看:https://blog.csdn.net/u012505432/article/details/51889052
但是我不太同意作者“而如果某位位数字为0 < 1,则需要舍弃这一位的情况。”的做法
我的做法:
简单来说,就是对每一位(个位,十位,百位。。。)判断,当该位的值大于1/小于1/等于1
(1)大于1:(n // m // 10 + 1) * m
(2)等于1:(n // m // 10) * m + n % m + 1
(3)小于1:(n // m // 10) * m
def solution(a):
m=1
num=0
while m<=a:
current=(a//m)%10
if current==1:
num+=(a//m//10)*m +a%m+1
if current>1:
num+=(a // m // 10 + 1) * m
if current==0:
num+=(a // m // 10 ) * m
m*=10
return num
print(solution(101))
print(solution(22))
三、运行结果
23
13
四、思考与总结
// 整除
% 取余
(a//10^n)%10 取某一位