2的個數
時間限制:3秒 空間限制:32768K
題目描述
請編寫一個方法,輸出0到n(包括n)中數字2出現了幾次。
給定一個正整數n,請返回0到n的數字中2出現了幾次。
測試樣例:
10
返回:1
每10個數, 有一個個位是2, 每100個數, 有10個十位是2, 每1000個數, 有100個百位是2. 使用一個循環, 每次計算單個位上2得總個數(個位,十位, 百位...).
例子:
以算百位上2爲例子: 假設百位上是0, 2, 和 >=3三種情況:
case 1: n=4241092, a= 42410, b=92. 計算百位上2的個數應該爲 4241 *100 次
case 2: n=4241292, a= 42411, b=92. 計算百位上2的個數應該爲 4241 *100 + (92+1) 次.
case 3: n=4241592, a= 42415, b=92. 計算百位上2的個數應該爲 (4241+1) *100 次.
(a+7)/10*x+(a%10==2)*(b+1);//
public class Count2 {
public int countN(int n) {
int count = 0;
for (int x = 1; x < n; x *= 10) {
int a = n / x, b = n % x;
count += (a + 7) / 10 * x;
if (a % 10 == 2) {
count += b + 1;
}
}
return count;
}
}
測試地址:[在線測試](http://www.nowcoder.com/practice/31a9495eb02844fb8c0e9ab101053f53?tpId=8&tqId=11066&rp=4&ru=/ta/cracking-the-coding-interview&qru=/ta/cracking-the-coding-interview/question-ranking)