求1到n的整數中出現1的次數

若求出1~13的整數中1出現的次數,那麼包括1的數有1、10、11、12、13。因此共出現6次

分析:我們要求1到n的整數中出現1的次數。

思路是分別計算個位、十位、百位........上出現 1 的個數。

以  n =216爲例:

個位上: 1 ,11,21,31,.....211。個位上共出現(216/10)+ 1個 1 。因爲除法取整,210~216間個位上的1取不到,所以我們加8進位。你可能說爲什麼不加9,n=211怎麼辦,這裏把最後取到的個位數爲1的單獨考慮,先往下看。

十位上:10~19,110~119,210~216.   十位上可看成 求(216/10)=21 個位上的1的個數然後乘10。這裏再次把最後取到的十位數爲1的單獨拿出來,即210~216要單獨考慮 ,個數爲(216%10)+1 .這裏加8就避免了判斷的過程。

後面以此類推

詳細看代碼:

public class Solution {
    public int NumberOf1Between1AndN_Solution(int n) {
            return func(n);
    }
       public static int func(int n){


         int cnt = 0;
    for (int m = 1; m <= n; m *= 10) {
        int a = n / m, b = n % m;
        cnt += (a + 8) / 10 * m + (a % 10 == 1 ? b + 1 : 0);
    }
    return cnt;
       }
}

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章