好奇的薯队长

好奇的薯队长

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();
    }
}
全部评论

相关推荐

我是小红是我:学校换成中南
点赞 评论 收藏
分享
头像
11-27 14:28
长沙理工大学
刷算法真的是提升代码能力最快的方法吗? 刷算法真的是提升代码能力最快的方法吗?
牛牛不会牛泪:看你想提升什么,代码能力太宽泛了,是想提升算法能力还是工程能力? 工程能力做项目找实习,算法也分数据结构算法题和深度学习之类算法
点赞 评论 收藏
分享
评论
2
收藏
分享
牛客网
牛客企业服务