简单游戏(easygame)【数论】

这篇博客介绍了一个简单的数学问题,即求解1到n的序列中数字1出现的次数。通过从右向左逐位分析,博主提出了找规律的方法:每个位数上的1出现的频率与该位数的基数有关,并且要考虑超出当前位数的额外1。给出了针对不同位数的处理策略,包括对0、1和大于1的情况。最后,虽然没有提供具体代码,但暗示了解题思路对于编程实现至关重要。
摘要由CSDN通过智能技术生成

>Description
一天,小R准备找小h去游泳,当他找到小h时,发现小h正在痛苦地写着一列数,1,2,3,…n,于是就问小h痛苦的原因,小h告诉他,现在他要算1…n这些数里面,1出现的次数是多少,如n=11的时候,有1,10,11共出现4次1,现在给出n,你能快速给出答案么?


>Input
一行,一个整数n

>Output
一个整数,表示1…n中1出现的次数。

对于30%的数据:n<=1000;
对于100%的数据:n<=maxlongint;


>解题思路
一道数学题(果然我不会$$)

找规律:
假设n=12345,我们从右往左一位一位看,我们会发现:
对于个位数,每10个数就会出现1个1;
对于十位数,每100个数就会出现10个1;
对于百位数,每1000个数就会出现100个1;
……
那对于当前位上多出来的数怎么办?
如果当前数=0,答案保持
如果当前数=1,我们要加上后面的数+1,例如枚举到第五个数1,我们要加上2345+1(0000的情况)
如果当前数>1,我们要加上位数,例如枚举到第三个数3,我们要加上100~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值