十进制中正整数N中1的个数(2)
上面的那種各個(gè)數(shù)據(jù)進(jìn)行遍歷的方法,耗時(shí),
我們可以通過根據(jù)數(shù)的規(guī)律進(jìn)行觀察是否存在某種規(guī)律:
當(dāng)N是1位數(shù)的情況:
? ? ? ? 如果N=3,那么從1到3的所有數(shù)字總,1,2,3,只有你個(gè)位數(shù)字的出現(xiàn)的個(gè)數(shù)是1,
? ? ? ?當(dāng)N=9時(shí),出現(xiàn)1的個(gè)數(shù)也是1個(gè)。
當(dāng)N是兩位數(shù)的時(shí)候:
? ? ? ?當(dāng)是兩位數(shù)的時(shí)候,個(gè)位和十位上都可能出現(xiàn)1,我們分開考慮,
? ? ? ?當(dāng)N=33時(shí),所有數(shù)中個(gè)位出現(xiàn)1的個(gè)數(shù)是4,在十位上出現(xiàn)1的個(gè)數(shù)是10,總數(shù)是14
? ? ?當(dāng)N=55式,個(gè)位數(shù)上出現(xiàn)1的個(gè)數(shù)是6,十位上出現(xiàn)1的個(gè)數(shù)是10,總數(shù)是16
?
? ? ?sum(19)=個(gè)位出現(xiàn)的個(gè)數(shù)+十位出現(xiàn)的個(gè)數(shù)=2+10=12
? ? ?sum(29)=個(gè)位出現(xiàn)的個(gè)數(shù)+十位出現(xiàn)的個(gè)數(shù)=3+10=13
? ? ?sum(39)=個(gè)位出現(xiàn)的個(gè)數(shù)+十位出現(xiàn)的個(gè)數(shù)=4+10=14
? 。。。。。。。。。。。。。。
? ???sum(99)=個(gè)位出現(xiàn)的個(gè)數(shù)+十位出現(xiàn)的個(gè)數(shù)=10+10=20
當(dāng)N是三位數(shù)的時(shí)候:
分別統(tǒng)計(jì)百位、十位‘個(gè)位上1的個(gè)數(shù)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?9以下: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 1個(gè)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 99以下: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 1*10+10*1=20個(gè)
? ? ? ? ? ? ? ? ? ? ? ? ? ?999以下: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?100*1+10*20=300個(gè)
? ? ? ? ? ? ? ? ? ? ? 9999以下: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 1*1000+10*30=4000個(gè)
? ? ? ? ? ? ? ?。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
? ? ? ? ? ? 9999999999以下: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?9000000個(gè)
? ? ? ?999999999999以下: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?100000000個(gè)
當(dāng)n增加10,至少增加1個(gè)1
當(dāng)n增加100,至少增加20個(gè)1
當(dāng)n增加1000,至少增加300個(gè)1
當(dāng)n增加10^k,時(shí),至少增加k*10^k-1個(gè)1
代碼:
int coutinter(int n) {int count = 0;int ifactor = 1;int islower = 0;int icurrnum = 0;int ihigh = 0;while (n / ifactor != 0){islower = n - (n / ifactor)*ifactor;icurrnum = (n / ifactor) % 10;ihigh = n / (ifactor * 10);switch (icurrnum){case 0:count += ihigh*ifactor;break;case 1:count += ihigh*ifactor + islower + 1;break;default:count += (ihigh + 1)*ifactor;break;}ifactor *= 10;} }
總結(jié)
以上是生活随笔為你收集整理的十进制中正整数N中1的个数(2)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 十进制中正整数N中1的个数
- 下一篇: 第一章语言基础