如何统计 1 到 100 中每个数字(0–9)出现的总次数

发布时间 - 2026-01-12 00:00:00    点击率:

本文介绍一种高效、简洁的方法,使用取模与整除运算统计 1 至 100 所有整数中各数字 0–9 的出现频次,避免字符串转换与异常处理,代码更健壮、可读性更强。

在编写数字频次统计程序时,常见的误区是依赖字符串操作(如 String.valueOf() 和 charAt()),不仅效率低,还容易因索引越界引发异常(如对个位数调用 charAt(1)),导致逻辑错误或运行时崩溃。更优解是采用纯数学方法:对每个整数反复执行 val % 10 获取个位数字,再通过 val /= 10 去掉该位,直至数值归零。

以下为推荐实现:

public class CountEachDigit {
    public static void main(String... args) {
        final int lo = 1;
        final int hi = 100;
        int[] digits = countDigits(lo, hi);

        for (int i = 0; i < 10; i++) {
            System.out.format("The digit %d appears %d times between %d and %d.\n", 
                              i, digits[i], lo, hi);
        }
    }

    private static int[] countDigits(int lo, int hi) {
        int[] digits = new int[10]; // 索引 0~9 分别对应数字 0~9 的计数

        for (int i = lo; i <= hi; i++) {
            int val = i;
            do {
                digits[val % 10]++; // 提取当前最低位数字并计数
            } while ((val /= 10) > 0); // 去掉已处理的最低位,继续循环
        }

        return digits;
    }
}

关键优势说明

  • 无字符串开销:避免创建大量临时 String 对象,提升性能;
  • 无异常风险:do-while 循环天然适配任意位数(1 位、2 位、3 位数均安全);
  • 逻辑清晰:val % 10 恒得当前个位,val /= 10 是整数截断除法,语义明确;
  • 可扩展性强:只需修改 lo 和 hi 即可适配任意正整数区间(如 1–1000)。

? 注意事项

  • 此方法默认统计 所有数字字符 的出现次数(例如 100 包含两个 '0' 和一个 '1',共贡献 3 次);
  • 若需排除前导零(如不将 5 视为 "005"),本逻辑已天然满足——因只处理实际数值位,无需额外判断;
  • 数组 digits 初始化为全 0,确保计数从零开始,无需手动清零。

运行结果示例:

The digit 0 appears 11 times between 1 and 100.
The digit 1 appears 21 times between 1 and 100.
The digit 2 appears 20 times between 1 and 100.
...
The digit 9 appears 20 times between 1 and 100.

掌握这种基于模运算的数字拆解技巧,不仅能解决本题,更是处理进制转换、回文判断、数字反转等编程问题的核心基础。


# git  # app  # ai  # String  # while  # 字符串  # 循环  # 对象  # 只需  # 更强  # 仅能  # 如对  # 不将  # 从零开始  # 清零  # 若需  # 正整数  # static 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: SQL查询语句优化的实用方法总结  企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?  百度浏览器ai对话怎么关 百度浏览器ai聊天窗口隐藏  HTML 中如何正确使用模板变量为元素的 name 属性赋值  Laravel怎么生成URL_Laravel路由命名与URL生成函数详解  在线制作视频的网站有哪些,电脑如何制作视频短片?  如何在沈阳梯子盘古建站优化SEO排名与功能模块?  瓜子二手车官方网站在线入口 瓜子二手车网页版官网通道入口  Laravel队列由Redis驱动怎么配置_Laravel Redis队列使用教程  如何用美橙互联一键搭建多站合一网站?  如何在阿里云域名上完成建站全流程?  Laravel项目怎么部署到Linux_Laravel Nginx配置详解  如何快速上传建站程序避免常见错误?  google浏览器怎么清理缓存_谷歌浏览器清除缓存加速详细步骤  如何在阿里云完成域名注册与建站?  Android Socket接口实现即时通讯实例代码  Laravel Facade的原理是什么_深入理解Laravel门面及其工作机制  香港服务器建站指南:免备案优势与SEO优化技巧全解析  Laravel的辅助函数有哪些_Laravel常用Helpers函数提高开发效率  Laravel Vite是做什么的_Laravel前端资源打包工具Vite配置与使用  米侠浏览器网页图片不显示怎么办 米侠图片加载修复  iOS验证手机号的正则表达式  广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?  如何在阿里云购买域名并搭建网站?  laravel怎么通过契约(Contracts)编程_laravel契约(Contracts)编程方法  猎豹浏览器开发者工具怎么打开 猎豹浏览器F12调试工具使用【前端必备】  网站制作价目表怎么做,珍爱网婚介费用多少?  Laravel怎么为数据库表字段添加索引以优化查询  JavaScript实现Fly Bird小游戏  网易LOFTER官网链接 老福特网页版登录地址  如何用PHP快速搭建高效网站?分步指南  Laravel Eloquent访问器与修改器是什么_Laravel Accessors & Mutators数据处理技巧  QQ浏览器网页版登录入口 个人中心在线进入  北京网站制作公司哪家好一点,北京租房网站有哪些?  Python数据仓库与ETL构建实战_Airflow调度流程详解  LinuxShell函数封装方法_脚本复用设计思路【教程】  Laravel如何处理JSON字段_Eloquent原生JSON字段类型操作教程  Laravel如何实现邮件验证激活账户_Laravel内置MustVerifyEmail接口配置【步骤】  大同网页,大同瑞慈医院官网?  详解Android——蓝牙技术 带你实现终端间数据传输  绝密ChatGPT指令:手把手教你生成HR无法拒绝的求职信  Win11怎么修改DNS服务器 Win11设置DNS加速网络【指南】  如何基于云服务器快速搭建个人网站?  javascript日期怎么处理_如何格式化输出  开心动漫网站制作软件下载,十分开心动画为何停播?  进行网站优化必须要坚持的四大原则  jimdo怎样用html5做选项卡_jimdo选项卡html5实现与切换效果【指南】  网站制作壁纸教程视频,电脑壁纸网站?  Linux系统命令中tree命令详解  家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?