整數中1出現的次數

題目:求出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;   
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章