题解 | [ZJOI2010]COUNT 数字计数

[ZJOI2010]COUNT 数字计数

https://www.nowcoder.com/practice/bb1a9efa244a4c9296390686ef17b024

import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    static long[] count(long n) {
        long[] c = new long[10];
        long pos = 1;
        while (pos <= n) {
            long preNum = n / (pos * 10);                  //当前位之前的数字
            long curNum = (n % (pos * 10)) / pos;          //当前位上的数字
            long bacNum = n % pos;                         //当前位之后的数字
            for (int i = 0; i <= 9; i++) {
                c[i] += preNum * pos;                      //举例 5在0~265的0~~200部分的十位中,出现了2*10次(50~59与150~159共20次)
                
                if (curNum > i) c[i] += pos;               //举例 5在0~65的十位出现了10次
                else if (curNum == i) c[i] += bacNum + 1;  //举例 6在0~65的十位出现了5+1次

                if (i == 0) c[i] -= pos;                   //如果当前位数字是0,在c[i]+=preNum;计算时,存在pom种以0开始的情况,需要去掉
            }
            pos *= 10;
        }
        return c;
    }
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        long a = in.nextLong();
        long b = in.nextLong();

        long[] ac = count(a - 1);
        long[] bc = count(b);

        for (int i = 0; i <= 9; i++) {
            System.out.print(bc[i] - ac[i]);
            if (i != 9) System.out.print(" ");
        }
    }
}

全部评论

相关推荐

大厂的边缘业务去了也没啥用,也得不到任何成长,尤其是审核、中台这种价值产出不清楚的,别被大厂光环蒙蔽了双眼,如果你找实习工作,优先找"离钱近的业务",钱多的业务福利年终奖啥的都不会差的
陈100:呵呵。 你在大厂工作2年,后面准备好,可以随便跳很多公司。 去小厂,现在拿到所谓多的钱,有啥用啊,未来没有了。 而且应届生,工作没几年的,也不是赚钱的时间。
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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