好奇的薯队长
好奇的薯队长
http://www.nowcoder.com/questionTerminal/12b157cfc4ea4a2bacae85d5e177c13c
- 从个位开始依次统计每一位有多少个1
- 一共有n个数含有个位(必然都有个位),每10个数一个周期,每个周期内有1个1
- 一共有n-9个数含有十位(n减去一位数的数量),每100个数一个周期,每个周期内有10个1
- 一共有n-9-90个数含有百位,每1000个数一个周期,每个周期内有100个1...
代码如下,有一个问题没想明白,为什么n必须是long?如果用int只能过90%,但是我并没有看出哪里存在溢出问题;哪位兄台能看出问题所在还望不吝指教!
import java.util.*; public class Main { public static void problem15() { Scanner scanner = new Scanner(System.in); while (scanner.hasNext()) { //int n = scanner.nextInt(); long n = scanner.nextLong(); long base = 9; long num = 1; long res = 0; while (n > 0) { res += (num) * (n / (base+num)); res += Math.min(num, n % (base+num)); n -= base; num *= 10; base *= 10; } System.out.println(res); } } public static void main(String[] args) { problem15(); } }