好奇的薯队长
好奇的薯队长
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();
}
}
查看28道真题和解析