日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

在从1到n的正数中1出现的次数

發(fā)布時(shí)間:2024/1/17 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 在从1到n的正数中1出现的次数 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

題目:輸入一個(gè)整數(shù) n ,求從 1 到 n 這 n 個(gè)整數(shù)的十進(jìn)制表示中 1 出現(xiàn)的次數(shù)。例如輸入 12 ,從 1 到 12 這些整數(shù)中包含 1 的數(shù)字有 1 , 10 , 11 和 12 ,1 一共出現(xiàn)了5 次。

分析:

???????? 我們?cè)龅竭^(guò)求給定數(shù)num的二進(jìn)制表示中1出現(xiàn)的次數(shù),但此題是求十進(jìn)制數(shù)中1出現(xiàn)的次數(shù)。簡(jiǎn)單的來(lái)想,可以用除法、取余來(lái)求的一個(gè)數(shù)中1的個(gè)數(shù),然后再?gòu)?到n循環(huán)即可解決。但當(dāng)n比較大時(shí),速度會(huì)比較慢。我們現(xiàn)在來(lái)嘗試從另一種思路來(lái)尋求一種更高效的方法。

??????? 我們可以換一種思路,分別求每位出現(xiàn)1的次數(shù),然后再將每位出現(xiàn)1的次數(shù)相加即是所求。 不妨假設(shè)要求的數(shù)是abcde(a>0),一般地,我們求第3位,也就是百位數(shù)字出現(xiàn)1的次數(shù),可分為如下三種情況:

????????? (1),當(dāng)c=0 時(shí),則該位出現(xiàn)1的數(shù)分析如下:

????????? 00100--00199

????????? 01100--01199

????????? 02100--02199

????????? ……

???????? 0b100--0b199

???????? 上面一共是b*100,對(duì)于a,我們進(jìn)行類似的分析,從0b200到0(b+1)099的數(shù)字中,百位數(shù)字是不會(huì)出現(xiàn)1的:

???????? 0(b+1)100--0(b+1)199

???????? 0(b+2)100--0(b+2)199

???????? ……

???????? 0(b+9)100--0(b+9)199

???????? 0(b+10)100--0(b+10)199即1b199

?????? 從0b200到1b199,共有10*(b*100)個(gè)百位數(shù)字為1的數(shù)字。那么類似的可以知道,從1b200到2b199同樣有10*b*100個(gè)百位數(shù)字為1的數(shù)字。依次類推,從2b200到3b199,……,(a-2)b200到(a-1)b199,由于c=0,因此百位出現(xiàn)1的最大的數(shù)字應(yīng)該為a(b-1)199;那么一共有多少個(gè)這樣的數(shù)據(jù)段呢?應(yīng)該比較容易看出來(lái),一共有a個(gè)。由此可以看出當(dāng)c=0時(shí),低位數(shù)字是不影響本位數(shù)字為1的數(shù)字的個(gè)數(shù)的。

由以上分析可知,百位數(shù)字為1的數(shù)字共有a*10*100+b*100=ab*100個(gè);

??????? (2),當(dāng)c=1時(shí),則該位出現(xiàn)1的數(shù)分析如下:

???????? 在(1)情況分析的基礎(chǔ)上,因?yàn)閏=1,所以從a(b-1)200到ab1de中,仍有百位數(shù)字為1的數(shù)字存在,且比較容易知道一共有de+1個(gè):即從ab100一直到ab1de,由此可以發(fā)現(xiàn),此時(shí)低位數(shù)字影響了本位數(shù)字為1的數(shù)字的個(gè)數(shù)。

??????? 所以,此種情況,百位數(shù)字為1的數(shù)字共有:ab*100+de+1

??????? (3),當(dāng)c>1時(shí),則該位出現(xiàn)1的數(shù)分析如下:

???????? 仍然在(1)分析的基礎(chǔ)上,因?yàn)閏>1,所以從a(b-1)200到ab199(因?yàn)閏>1,所以abcde>ab199,而ab200到abcde中百位數(shù)字是不會(huì)出現(xiàn)1的)中,仍有1*100個(gè)百位數(shù)字為1的數(shù)字,在此情況下,我們同樣可以發(fā)現(xiàn),此時(shí)低位數(shù)字又不影響本位數(shù)字為1的數(shù)字的個(gè)數(shù)了。

??????? 所以,此種情況,百位數(shù)字為1的數(shù)字共有:ab*100+1*100=(ab+1)*100.

分析到這里,我想就應(yīng)該比較容易寫出程序了吧^_^


轉(zhuǎn)載于:https://blog.51cto.com/10622551/1694395

總結(jié)

以上是生活随笔為你收集整理的在从1到n的正数中1出现的次数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。