整數中1出現的次數(從1到n整數中1出現的次數)

2022-06-16 18:21:14 字數 909 閱讀 8908

求出1~13的整數中1出現的次數,並算出100~1300的整數中1出現的次數?為此他特別數了一下1~13中包含1的數字有1、10、11、12、13因此共出現6次,但是對於後面問題他就沒轍了。acmer希望你們幫幫他,並把問題更加普遍化,可以很快的求出任意非負整數區間中1出現的次數。

簡單的方法就是按照給位進行分析

在個位出現1的個數=n/10+(個位=0,0;個位》1,1;個位=1,低0位+1);

十位位出現1的個數=n/100*10+(十位=0,0;十位》1,10,;十位=1,低一位+1);

百位出現1的個數=n/1000*100+(百位=0,0;百位》1,100;百位=1,低兩位+1);

等等演算法的複雜度僅僅和位數有關

演算法描述:

(1)求出所給正整數a的位數,假設為n,num儲存1的個數

(2)另p=a,num+=p/10i*10i-1;(i=1...n-1);

(3)令p=a/10i-1;p=p%10,if(p==1) num+=a%10i-1+1;if(p>1) num+=10i-1;(i=1....n)

(4)printf(num);

手工求解:

個位=12+1

十位=10+10

百位=0+26

59個1

12107:

個位:1210*1+1

十位:121*10

百位:12*100+8

千位:1*1000+1000

萬位:0+2108

10000:

1000+0

100*10+0

10*100+0

1*1000+0

0+1

1

class

solution

14return

res;15}

16 };

整數中1出現的次數(從1到n整數中1出現的次數)

求出1 13的整數中1出現的次數,並算出100 1300的整數中1出現的次數?為此他特別數了一下1 13中包含1的數字有1 10 11 12 13因此共出現6次,但是對於後面問題他就沒轍了。acmer希望你們幫幫他,並把問題更加普遍化,可以很快的求出任意非負整數區間中1出現的次數。include u...

整數中1出現的次數(從1到n整數中1出現的次數)

時間限制 1秒 空間限制 32768k 題目描述 include using namespace std class solution 求之前的length 1位中含乙個數 int base1 0 int base2 1 for int i 0 i1 i cout cout cout 求從base2...

整數中1出現的次數(從1到n整數中1出現的次數)

求出1 13的整數中1出現的次數,並算出100 1300的整數中1出現的次數?為此他特別數了一下1 13中包含1的數字有1 10 11 12 13因此共出現6次,但是對於後面問題他就沒轍了。acmer希望你們幫幫他,並把問題更加普遍化,可以很快的求出任意非負整數區間中1出現的次數。演算法一 暴力累加...