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));

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/335529.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows 命令终端(CMD)的快捷键

这些快捷键只在Windows系统操作有效&#xff0c;连接远程Linux主机&#xff0c;再操作这些快捷键是无效的&#xff0c;因为连接远程的Linux主机后&#xff0c;你用的是Linux命令终端。 快捷键&#xff1a; F1&#xff1a;按F1逐字显示最后一次执行的命令 F2&#xff1a;按F2会…

java开发plc上位机软件开发_上位机开发之西门子PLC-S7通信实践

写在前面&#xff1a;就目前而言&#xff0c;在中国的工控市场上&#xff0c;西门子仍然占了很大的份额&#xff0c;因此对于上位机开发而言&#xff0c;经常会存在需要与西门子PLC进行通信的情况。然后对于西门子PLC来说&#xff0c;通信方式有很多&#xff0c;下面简单列举一…

boss直聘账号异常登不上_【苹果IOS游戏账号分享】据说是最欢乐的2D冒险游戏?Q萌有趣,好不好玩你说了算——惊奇剑士...

惊奇剑士游戏下载点击下方卡片下载游戏&#xff01;不会使用请点击《操作指南》↓↓↓↓本游戏是由1群的资源库&#xff1a;“hentai是绅士不是变态” 赞助我们购买的&#xff0c;感谢大家的鼎力支持&#xff0c;二哈替大家感谢下hentai是绅士不是变态。可甜可盐的小哥哥之前还…

jquery 延迟加载代码_延迟加载是一种代码气味

jquery 延迟加载代码您见过那些具有许多属性的巨大物体吗&#xff1f; 这些域对象由于不希望从数据库检索太多信息而在其中使用延迟加载&#xff1f; 我敢打赌你有这种令人怀疑的快乐。 今天&#xff0c;我想与您分享我对它们的印象- 使用延迟加载应被视为一种代码味道&#x…

inotify-java下载_inotify-java-2.1.jar

【实例简介】inotify能够对文件系统进行监控&#xff0c;书上举的例子都是c使用inotify的例子&#xff0c;难道没有Java版吗&#xff0c;肯定有&#xff0c;只不过要自己编译&#xff0c;在网上找到别人的博客有&#xff0c;但是人家不愿意分享&#xff0c;我就只能自己编译了&…

SQL语句执行顺序

文章目录SQL 简介SQL 语句的执行顺序重点SQL 简介 SQL 是 Structured Query Language 的缩写&#xff0c;称为结构化查询语言&#xff0c;SQL 是一种操作关系型数据库的规则&#xff0c;SQL 语句以分号结尾&#xff0c;不区分大小写&#xff0c;建议关键词使用大写。 SQL 语句…

getexternalfilesdir 相册_音乐相册(电子相册制作)V5.2 安卓最新版

音乐相册(电子相册制作)是一个功能强大的电子相册创建工具。最新版本的音乐专辑应用程序可以帮助用户快速创建精美的多媒体专辑视频&#xff0c;并匹配优美的音乐伴奏&#xff0c;使照片更精彩。音乐专辑应用程序支持几乎所有流行的图片格式&#xff0c;并支持导入和导出&#…

jdk 9和jdk8_JDK 9是某些功能的终结

jdk 9和jdk8几天前宣布JDK 9是Feature Complete&#xff01; 进行切割的许多“功能”是附加功能&#xff0c;但有些是移除功能。 这篇文章介绍了一些从OpenJDK和/或Oracle JDK with Java 9中删除的项目。 JEP 220 &#xff08;“模块化运行时图像”&#xff09;的一部分是删除…

二级java题型及分值_2016年全国计算机二级java语言程序设计考试大纲

2016年全国计算机二级java语言程序设计考试大纲2016年3月计算机考试即将在3月26日-29日进行&#xff0c;为了帮助大家顺利通过2016年计算机二级考试&#xff0c;下面百分网小编为大家带来2016年全国计算机二级java语言程序设计考试大纲&#xff0c;供大家参考学习&#xff0c;预…

linux系统下安装jdk教程

一、首先下载linux版本jdk jdk官网&#xff1a;http://www.oracle.com/technetwork/java/javase/downloads/index.html 根据自己的需求&#xff0c;下载不同版本的jdk 2.将下载好的jdk压缩包&#xff0c;通过ftp上传到linux系统的当前用户下&#xff0c;我当前登录的用户为r…

mqtt java_MQTT和Java入门

mqtt javaMQTT&#xff08;MQ遥测传输&#xff09;是一种轻量级的发布/订阅消息传递协议。 MQTT在物联网应用程序中得到了广泛使用&#xff0c;因为它被设计为在占用空间小的系统上运行在远程位置。 MQTT 3.1是OASIS标准&#xff0c;您可以在http://mqtt.org/上找到所有信息。…

iphone11什么时候上市_hd3手表高仿哪里买 什么时候上市?

hd3手表高仿哪里买 什么时候上市? 导读&#xff1a;hd3手表高仿哪里买zf的万国7日链高仿表怎么样&#xff1f;款式设计非常出色&#xff0c;很多手表的款式&#xff0c;依靠着该性价比的迅速提升来做出的有效转化&#xff0c;年轻人对于复刻表的选择&#xff0c;能拥有的这些细…

arcgis工具python源码_面向Arcgis的python脚本编程_数据

【实例简介】《面向ArcGIS的Python脚本编程》是一本指导ArcGIS for Desktop专业用户进行Python开发的指南。该书将教会您如何通过编写Python代码处理空间数据并在ArcGIS中自动化实现地理处理任务【实例截图】【核心代码】面向arcgis的python脚本编程数据└── 面向arcgis的pyt…

Windows 命令终端(CMD)程序员常用的命令

文章目录certutilcddirmd/mkdirrddelreplacechdir/cdattribhelptypemorefindstrrename/renset环境变量扩展echonetstattskilltasklisttaskkillnettreecopystartpauseprintverwinversysteminfowmiclogofftracertroute printtelnetftppingipconfigshutdown远程关机formatchkdskti…

驱动级的自动按键_空调遥控器特殊按键使用方法及注意事项

在上门维修过程中&#xff0c;用户常常由于遥控器使用不当&#xff0c;或者幵启了特定按键引起空调器的假性故障&#xff0c;这时需要进行电话解答或上门讲解&#xff0c;现对空调遥控器的特殊功能按键作简单介绍。示例遥控器型号为格力YAD0F,与KFR-23GW/ ( 23570 ) Aa-3挂式空…

净资产滚动率_净资产的结构

净资产滚动率Netty的包装结构很棒。 每个程序员都应该研究它。 每个系统都应该模仿它&#xff1b; 每个项目经理都应将其打印出来&#xff0c;拍在墙上&#xff0c;然后对开发人员说&#xff1a;“那样。” Netty是一个“ ...异步事件驱动的网络应用程序框架&#xff0c;用于…

freebsd nginx php mysql_FreeBSD 安装配置Nginx+PHP+APC+MySQL

在 FreeBSD 下安装软件的传统方法是用 ports 源码安装&#xff0c;不过使用 ports 源码编译安装太耗时(尤其是各种库依赖多、大的时候)&#xff0c;个人还是喜欢 pkg 这种软件包管理工具直接安装编译好的二进制软件包&#xff0c;不用自己编译&#xff0c;省时省力。FreeBSD 也…

python入门之类的基础语法-关于一些Python的一些基础语法训练

1&#xff1a;已知a和b元素 a "pyer" b "apple" 用字典和format方法实现&#xff1a;效果&#xff1a;my name is pyer, i love apple. 1、format的方法 c "mysql name is {0},i love {1}".format("pyer","apple") 用字典…

jdk 9和jdk8_JDK 9已完成功能!

jdk 9和jdk8今天的Mark Reinhold消息JDK 9已完成功能完善-现在该降级了 &#xff0c; 它宣布JDK 9的“总体功能集已冻结”。 OracleJava平台小组的首席架构师Reinhold补充说&#xff1a;“极不可能将任何进一步的JEP定向到该发行版。” 与该消息类似的文本也出现在JDK 9页面上 …

Java从键盘输入若干数_用java编程序:从键盘输入若干个整数,输出这些数中大于其平均值的数。...

展开全部引用1楼 christal yhy的答案,考虑到浮点数的存在,特在此基础上优化一下,代码如下:public static void main(String[] args) {Scanner scan new Scanner(System.in);System.out.println("请输入62616964757a686964616fe59b9ee7ad9431333262373933要输入的个数:&qu…