| 12345678910111213141516 | 
							- func countDigitOne(n int) (ones int) {
 
- 	// Every 1000 has 100 ones at hundreds digit, every 100 has 10 ones at tens digit, ...
 
- 	// Assume the base of curr digit (like 1000) is m, then a = n / m, b = n % m,
 
- 	// If curr digit is 0, the ones of curr dight is a / 10 * base;
 
- 	// curr digit is 1, the ones is a / 10 * base + (b + 1);
 
- 	// curr digit is 2~9, the ones is (a / 10 + 1) * base.
 
- 	// So, the ones of curr digit is (a + 8) / 10 * base + (a % 10 == 1) * (b + 1)
 
- 	for m := 1; m <= n; m *= 10 {
 
- 		a, b := n/m, n%m
 
- 		ones += (a + 8) / 10 * m
 
- 		if a%10 == 1 {
 
- 			ones += b + 1
 
- 		}
 
- 	}
 
- 	return
 
- }
 
 
  |