面試題43 1 n整數中1出現的次數

2021-10-02 21:08:50 字數 1319 閱讀 3775

輸入乙個整數n,求1~n這n個整數的十進位制表示中1出現的次數。例如,輸入12,1~12這些整數中包含1的數字有1、10、11和12,1一共出現了5次。

對於乙個數,每次對10取餘判斷最低位是不是1,就可以得到這個數中1的數量,從1遍歷到n,每個數都這麼做,就可以得到1的總數量了。

看劍指offer上的內容沒看懂,在網上找講解的時候,看到了《程式設計之美》裡的解釋,大概能理解了,引用過來。

設n=abcde,其中abcde分別為十進位制中各位上的數字,以計算百位上1出現的次數為例來分析。百位上出現1的情況,受到3方面的影響:百位上的數字、百位以下(低位)的數字、百位以上(高位)的數字。

如果百位上的數字為0,百位上出現1的次數由高位決定。比如:12013,百位上出現1的情況可能是:100~199,1100~1199,2100~2199,……,11100~11199,一共1200個。可以看出是由高位(12)決定,並且等於高位(12)乘以當前位數(100)。注意:高位不包括當前位。

如果百位上的數字是1,百位上可能出現1的次數不僅受到高位影響還受到低位影響。比如:12113,受高位影響的結果是1200個。再看受低位的影響,百位出現1的情況是12100~12113,一共14個,等於低位數字(13)+1。注意:低位不包括當前位。

如果百位數字大於1(2~9),則百位上出現1的情況僅受高位影響。比如,12213,百位出現1的情況是:100~199,1100~1199,2100~2199,……,11100~11199,12100~12199,一共有1300個,並且等於更高位數字+1(12+1)乘以當前位數(100)。

package com.wsy;

public class main

public static void gettotalnumberof1(int n)

system.out.println("1的總個數:" + count);

}public static int getnumberof1(int n)

n /= 10;

}return count;

}}

package com.wsy;

public class main

public static void getcountof1(int n)

int i = 1;

int count = 0;

while (n / i != 0) else if (current == 1) else

i *= 10;

}system.out.println("1到" + n + "有" + count + "個1");

}}

面試題43 1 n整數中1出現的次數

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

面試題43 1 n整數中1出現的次數

輸入乙個整數 n 求1 n這n個整數的十進位制表示中1出現的次數。例如,輸入12,1 12這些整數中包含1 的數字有1 10 11和12,1一共出現了5次。示例 1 輸入 n 12 輸出 5 示例 2 輸入 n 13 輸出 6 限制 1 n 2 31 思路 遞迴。將數字分為最高位和後幾位。當數字由1...

43 1 n 整數中 1 出現的次數

輸入乙個整數n,求1 n這n個整數的十進位制表示中1出現的次數。例如,輸入12,1 12這些整數中包含1的數字有1 10 11和12,1一共出現了5次。示例 1 輸入 n 12 輸出 5 示例 2 輸入 n 13 輸出 6 限制 1 n 2 31注意 本題與主站 233 題相同 最直觀的做法,就是累...