好奇的薯队长

好奇的薯队长

http://www.nowcoder.com/questionTerminal/12b157cfc4ea4a2bacae85d5e177c13c

  1. 从个位开始依次统计每一位有多少个1
  2. 一共有n个数含有个位(必然都有个位),每10个数一个周期,每个周期内有1个1
  3. 一共有n-9个数含有十位(n减去一位数的数量),每100个数一个周期,每个周期内有10个1
  4. 一共有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();
    }
}
全部评论

相关推荐

01-19 12:48
门头沟学院 C++
只想搞钱的鸽子很喜欢...:混账是很多的,还有那些在自己风华正茂的年纪说风凉话讥讽那些下岗前员工的。这些人都是现在职场环境这么烂的帮凶
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务