java 统计数字个数_统计数字问题(Java)
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)相关推荐
- mysql统计唯一个数_统计数组元素的个数和唯一性的函数
有些函数可以用来确定数组中的值总数及唯一值的个数.使用函数count()对元素个数进行统计,sizeof()函数时count()的别名,他们的功能是一样的. ①函数count() 函数count()的 ...
- java识别汉字个数_统计字符串中汉字的个数
字符串可以包括数字.字母.汉字或者其他字符.使用Charater类的isDigit()方法可以判断字符串中的某个字符是否为数字, 使用Character类的isLetter()方法可以判断字符串中的某 ...
- Java 计算字母个数_统计字符串中每个字母的个数
最近整理之前自己学习Java时的一些代码笔记,可能都是一些比较基础的Java知识,在这里只是给需要的人参考一下. 统计一个字符串中的每个字母的个数 现有字符串:dludsstytrwtrjahtksd ...
- python统计英文单词个数_统计英文单词的个数的python代码 及 字符串分割
字符串分割 str="a|and|hello|||ab" alist = str.split('|') print alist结果 str="a hello{这里换成5个 ...
- 用python统计字母个数_python统计字母个数 python 统计文本中字母个数
python 统计文本中字母个数 作业文件等有人回答小编再发,之前发文件被屏蔽了明明转身就有一个温馨的港湾,却偏偏还要去追逐那无望的孤船. l = 0with open('file.txt', 'r' ...
- python统计字符串数字个数_python统计字符串中数字个数_后端开发
python怎么随机生成奇数_后端开发 python随机生成奇数的方法:导入random模块,使用random模块生成随机数,然后判断生成的随机数是否为奇数,若是奇数就加入列表.使用此方法得到的列表包 ...
- python计算数字个数_python统计字母、空格、数字等字符个数的实例
如下所示: # -*- coding: utf-8 -*- # 要求:输入一行字符,分别统计出其中英文字母.空格.数字和其它字符的个数. def count(s): count_a=count_z=c ...
- 统计数字问题_统计问题
统计数字问题 Statistics can be one of the most divisive and harmful misinformation tools, and I have seen ...
- python统计数组元素个数_统计二维数组里元素的个数
记录一下一个问题的解决,里面涉及几个函数的用法,当作复习啦. 先说明一下问题.数据表里面的字段 content 存储了一个以逗号分割的字符串,最大有20个数,最大数字为40.比如3,24,33,40类 ...
最新文章
- querywrapper or and嵌套_两个经常用的逻辑函数AND函数,OR函数
- Android登录拦截器实现方式(一)
- DPM 2010(三)---Exchange2010单邮箱恢复
- 【计算机网络】计算机网络 标准化及组织 ( 标准化工作 | 标准化工作流程 | 标准化工作组织 )
- 灯光工厂滤镜插件knoll light factory
- 福大软工1816:Beta(5/7)
- R语言观察日志(part17)--.Primitive
- Springmvc入门案例(1)
- 1个ieee1394端口_5G新在哪儿(6)?-天线端口的故事
- Python Imaging Library: ImagePath Module(图像路径模块)
- Unity同一项目双开方法
- Cocos2d-x三种定时器启用和停止
- 38线性映射05——代数与代数同构
- Linux - 在yocto构建中使用i2c-tools
- 几种经典病毒动力学模型【基于matlab的动力学模型学习笔记_3】
- 嘉立创 PCB 生产流程
- Unity - 射线检测
- Make sure that `gem install sqlite3 -v '1.3.13' --source 'https://rubygems.org/'` succeeds before...
- BugKu CTF(杂项篇MISC)—放松一下吧
- python画误差棒_Python数据处理从零开始----第四章(可视化)(3)散点图和误差棒...
热门文章
- java 不同类型 映射_如何使用Java泛型映射不同的值类型
- java lambda::_书评:精通Lambda:多核世界中的Java编程
- ejb生命周期_EJB 3.x:生命周期和并发模型(第1部分)
- Java的精妙之处,包括基元和变量参数数组
- Java应用程序的简单令牌认证
- 使用Spring MVC应用程序配置嵌入式H2控制台
- javafx简单吗_JavaFX即将推出您附近的Android或iOS设备吗?
- qotd服务_QOTD:Java线程与Java堆空间
- 使用Spring Integration重试RabbitMQ
- Oracle Service Bus简介