Description

一本书的页码从自然数1 开始顺序编码直到自然数n。书的页码按照通常的习惯编排,每个页码都不含多余的前导数字0。例如,第6 页用数字6 表示,而不是06 或006 等。数字计数问题要求对给定书的总页码n,计算出书的全部页码中分别用到多少次数字0,1, 2,…,9。给定表示书的总页码的10 进制整数n (1≤n≤10^9) 。计算书的全部页码中分别用到多少次数字0,1,2,…,9。

Input

输入数据只有1 行,给出表示书的总页码的整数n。

Output

输出数据共有10行,在第k行输出页码中用到数字k-1 的次数,k=1,2,…,10。

Sample Input

11

Sample Output

1

4

1

1

1

1

1

1

1

1

import java.util.Scanner;

public class Main {

public static int num[] = new int[10];

public static void main(String[] args) {

Scanner cin = new Scanner(System.in);

int n = 0;

n = cin.nextInt();

Count(n); // 统计00..00 - n之间的0-9数字的个数

num[0] -= del_zero(get_length(n)); // 减去比如0001,0066这种多余的0的个数

for (int i = 0; i < 10; i++)

System.out.println(num[i]);

}

// 获取数字的长度

public static int get_length(int num){

return (int)Math.log10(num) + 1;

}

// 获取数字的第一位数

public static int get_head(int num){

return num / (int) Math.pow(10, get_length(num) - 1);

}

// 获取数字的余数

public static int get_remainder(int num){

return num % (int) Math.pow(10, get_length(num) - 1);

}

/* 统计00..00~n之间多余的0

比如000 - 999可以看成

0 00 - 0 99, 100 - 100

0 1 - 0 9, 10 - 99

*/

public static int del_zero(int length){

if (length == 1)

return 1;

return del_zero(length - 1) + (int) Math.pow(10, length - 1);

}

// 统计00..00 - n之间0-9数字的个数

public static void Count(int n){

/* f(n) = n * 10^(n-1),

f(n)是n个0到n个9之间0-9的个数

比如f(2) = 20

表示00 - 99之间0有20个, 1有20个......9有20个

*/

/* 比如34789, 分成3组0000 - 9999

0 0000 - 0 9999

1 0000 - 1 9999

2 0000 - 2 9999

*/

for (int i = 0; i < 10; i++){

num[i] = num[i] + get_head(n) * (get_length(n) - 1) * (int) Math.pow(10, (get_length(n) - 2));

}

/* 比如34789, 首位0, 1, 2分别加上10000个

00000 - 09999

10000 - 19999

20000 - 29999

*/

for (int i = 0; i < get_head(n); i++){

num[i] = num[i] + (int) Math.pow(10, get_length(n) - 1);

}

// 比如34789, 首位3, num[3]加上余数4789和特殊情况30000

num[get_head(n)] += get_remainder(n) + 1;

// 如果余数为0, 比如 40000, num[0] 得加上长度-1,并且余数为0时结束递归

if (get_remainder(n) == 0) {

num[0] += get_length(n) - 1;

return;

}

/* 比如4000589这种情况, 直接余数递归回漏掉中间的0

所以num[0]得加上(7 - 1 - 3) * (589 + 1)

*/

if (get_length(n) - 1 != get_length(get_remainder(n))) {

num[0] += (get_length(n) - 1 - get_length(get_remainder(n))) * (get_remainder(n) + 1);

}

// 用余数接着递归

Count(get_remainder(n));

}

}

java 统计数字个数_统计数字问题(Java)相关推荐

  1. mysql统计唯一个数_统计数组元素的个数和唯一性的函数

    有些函数可以用来确定数组中的值总数及唯一值的个数.使用函数count()对元素个数进行统计,sizeof()函数时count()的别名,他们的功能是一样的. ①函数count() 函数count()的 ...

  2. java识别汉字个数_统计字符串中汉字的个数

    字符串可以包括数字.字母.汉字或者其他字符.使用Charater类的isDigit()方法可以判断字符串中的某个字符是否为数字, 使用Character类的isLetter()方法可以判断字符串中的某 ...

  3. Java 计算字母个数_统计字符串中每个字母的个数

    最近整理之前自己学习Java时的一些代码笔记,可能都是一些比较基础的Java知识,在这里只是给需要的人参考一下. 统计一个字符串中的每个字母的个数 现有字符串:dludsstytrwtrjahtksd ...

  4. python统计英文单词个数_统计英文单词的个数的python代码 及 字符串分割

    字符串分割 str="a|and|hello|||ab" alist = str.split('|') print alist结果 str="a hello{这里换成5个 ...

  5. 用python统计字母个数_python统计字母个数 python 统计文本中字母个数

    python 统计文本中字母个数 作业文件等有人回答小编再发,之前发文件被屏蔽了明明转身就有一个温馨的港湾,却偏偏还要去追逐那无望的孤船. l = 0with open('file.txt', 'r' ...

  6. python统计字符串数字个数_python统计字符串中数字个数_后端开发

    python怎么随机生成奇数_后端开发 python随机生成奇数的方法:导入random模块,使用random模块生成随机数,然后判断生成的随机数是否为奇数,若是奇数就加入列表.使用此方法得到的列表包 ...

  7. python计算数字个数_python统计字母、空格、数字等字符个数的实例

    如下所示: # -*- coding: utf-8 -*- # 要求:输入一行字符,分别统计出其中英文字母.空格.数字和其它字符的个数. def count(s): count_a=count_z=c ...

  8. 统计数字问题_统计问题

    统计数字问题 Statistics can be one of the most divisive and harmful misinformation tools, and I have seen ...

  9. python统计数组元素个数_统计二维数组里元素的个数

    记录一下一个问题的解决,里面涉及几个函数的用法,当作复习啦. 先说明一下问题.数据表里面的字段 content 存储了一个以逗号分割的字符串,最大有20个数,最大数字为40.比如3,24,33,40类 ...

最新文章

  1. querywrapper or and嵌套_两个经常用的逻辑函数AND函数,OR函数
  2. Android登录拦截器实现方式(一)
  3. DPM 2010(三)---Exchange2010单邮箱恢复
  4. 【计算机网络】计算机网络 标准化及组织 ( 标准化工作 | 标准化工作流程 | 标准化工作组织 )
  5. 灯光工厂滤镜插件knoll light factory
  6. 福大软工1816:Beta(5/7)
  7. R语言观察日志(part17)--.Primitive
  8. Springmvc入门案例(1)
  9. 1个ieee1394端口_5G新在哪儿(6)?-天线端口的故事
  10. Python Imaging Library: ImagePath Module(图像路径模块)
  11. Unity同一项目双开方法
  12. Cocos2d-x三种定时器启用和停止
  13. 38线性映射05——代数与代数同构
  14. Linux - 在yocto构建中使用i2c-tools
  15. 几种经典病毒动力学模型【基于matlab的动力学模型学习笔记_3】
  16. 嘉立创 PCB 生产流程
  17. Unity - 射线检测
  18. Make sure that `gem install sqlite3 -v '1.3.13' --source 'https://rubygems.org/'` succeeds before...
  19. BugKu CTF(杂项篇MISC)—放松一下吧
  20. python画误差棒_Python数据处理从零开始----第四章(可视化)(3)散点图和误差棒...

热门文章

  1. java 不同类型 映射_如何使用Java泛型映射不同的值类型
  2. java lambda::_书评:精通Lambda:多核世界中的Java编程
  3. ejb生命周期_EJB 3.x:生命周期和并发模型(第1部分)
  4. Java的精妙之处,包括基元和变量参数数组
  5. Java应用程序的简单令牌认证
  6. 使用Spring MVC应用程序配置嵌入式H2控制台
  7. javafx简单吗_JavaFX即将推出您附近的Android或iOS设备吗?
  8. qotd服务_QOTD:Java线程与Java堆空间
  9. 使用Spring Integration重试RabbitMQ
  10. Oracle Service Bus简介