求出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
1class
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出現的次數。演算法一 暴力累加...