題目:求出1~13的整數中1出現的次數,並算出100~1300的整數中1出現的次數?爲此他特別數了一下1~13中包含1的數字有1、10、11、12、13因此共出現6次,但是對於後面問題他就沒轍了。ACMer希望你們幫幫他,並把問題更加普遍化,可以很快的求出任意非負整數區間中1出現的次數。
第一次做粗略地看了下解答,感覺很煩就跳過了,現在又回頭去看,終於搞懂了,數學好真的很重要!!!!
整數中1出現的次數
參考這個博客,不過他的代碼寫得可讀性不高,我做了些改變,有些代碼寫得更短,實在太風騷,暫時還駕馭不了,轉眼這道題目就剛了一個多小時了,換成以前的自己真是難以想象會有如此的耐心,學無止境,持之以恆。
上代碼:
int NumberOf1Between1AndN_Solution(int n)
{
if(n < 1) return 0;
if(n < 9) return 1;
int high = 0;//高位
int cur = 0;//當前位的數值
int count = 0;
for(int i=1;i<=n;i*=10)
{
high=n/(10*i);//對高位求
count+=high*i;
cur=(n/i)%10;//判斷當前位
if(cur>1)
count+=i;
else if(cur==1)//情況複雜
count+=n-n/i*i+1;
}
return count;
}