好奇的薯队长

好奇的薯队长

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

相关推荐

05-12 22:16
已编辑
北京邮电大学 研发工程师
牛客302360988号:0offer+1 滴滴都不给我面 佬没投鹅吗,鹅应该很喜欢北邮吧
投递美团等公司10个岗位
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

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