自然数从1到n之间,有多少个数字含有1

本文介绍了一种使用递推方法计算特定范围内含有数字1的整数个数的方法,避免了使用效率较低的for循环。通过定义h(n)和f(n),逐步推导出了计算公式,并给出了具体实例。
部署运行你感兴趣的模型镜像

      问题明确而简单.for循环肯定是不好的.

      用递推方法:

      定义h(n)=从1到9999.....9999  ( n 个 9)之间含有1的数字的个数.定义f(n)为n位数中含有1的数字的个数.

   由定义可知:h(n)=f(1)+f(2)+f(3)+....+f(n);

则f(1)=h(1)=1;

  f(2)=10^1+8*h(1).

  f(3)=10^2+8*h(2).

  f(4)=10^3+8*h(3).

  ......

  意义如下:f(4)是一个四位数,假如最高位(千位)为1,那么后面是啥都行,这个数字必然有1了,所以是10^3.

    假如最高位不是1,最高位不能是0(不然就成3位数了),所以最高位有8种选择2,3,4,5,6,7,8,9.这样一来,低三位中必须含有1,要不然就没有一了.所以乘上h(3).

    

    下面举一个例子,求1到2345之间含有1数字的个数.

    2345=h(1)+h(2)+h(3)+h(4)的一部分.

    关键是h(4)的一部分应该怎么求.定义p(4,2)表示是四位数并且虽高位小于2的数中含有1的个数.p(4,2)=10^3+p(3,3);看到这里就应该明白了.p(3,3)表示三位数中最高位小于3的含1数字的个数.

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值