思路:分别计算个位出现1的次数,十位出现1的次数,百位出现1的次数…
- 个位数出现1的次数
找规律发现1,11,21,31…,个位数1每隔10次出现一次,初步猜测为n/10。但是需要注意当n%10>=1的时候,出现次数为n/10+1,而当n%10<1的时候,出现次数为n/10。
故个位数出现1的次数为:
if n%10<1: s=n/10
else: s=n/10+1 - 十位数出现1的次数
找规律发现10,11,12,…,19,110,111,112,…,119,十位数1每隔100次出现10次,初步猜测为[n/100]*10。但是需要注意的是
当n%100>19的时候,出现次数为[n/100]*10+10;
当n%100<10的时候,出现次数为n/100;
当10<=n%100<=19的时候,出现次数为[n/100]*10+n%10+1 - 百位数出现1的次数
找规律发现100,101,…,199,1100,1101,…,1199,百位数1每隔1000次出现100次,初步猜测为[n/1000]*100。但是需要注意的是:
当n%1000>199时,出现次数为[n/1000]*100+100;
当n%1000<100时,出现次数为[n/1000]*100;
当100<=n%100<=199时,出现次数为[n/1000]*100+n%100+1
… - 依次类推,每位数出现1的次数可用如下通用公式表示:各位时,i=1,十位时,i=10,。。。。
if n%(10i)>2i-1:s=[n/(10i)]i+i
elif n%(10i)<i:s=[n/(10i)]i
else: s=[n/(10i)]*i+n%i+1
实现代码为:
# -*- codin

这篇博客探讨了如何用Python计算从1到n中1出现的次数。通过分析个位、十位、百位等的规律,得出每个位上1出现的次数。总结了通用公式来计算任意位数上1的出现次数,并提供了实现代码。
最低0.47元/天 解锁文章
333

被折叠的 条评论
为什么被折叠?



