博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
从1到n整数中1出现的次数
阅读量:4886 次
发布时间:2019-06-11

本文共 1347 字,大约阅读时间需要 4 分钟。

题目如题

如 5 中1出现的次数 为1

12中1出现的次数为5

public class NumberOf1Between1AndN {    /*     *输入一个整数n,求从1到n这N个十进制表示中1出现的次数     *以5位数说明:     *     *当百位上数字是0时:如:20099的1出现的次数为100-199,1100-1199,。。。,19100-19199共20*100次,即为高位数*100     *当百位上数字是1时:如:20134的1出现的次数为100-199,1100-1199,。。。,19100-19199共20*100次,     *    和低位数字出现数字34+1次,即21100-21134,共20*100+(34+1)     *当百位上数字大于1时:如20233的1出现的次数为100-199,1100-1199,。。。,19100-19199,20100-20199共21*100,即为(高位数+1)*100;     *其它各位同理,不再详述     */    public long CountOne(long n)    {        long count = 0;        long i = 1;        long current = 0,low = 0,high = 0;        while((n / i) != 0)        {                       current = (n / i) % 10;//当前位是多少            high = n / (i * 10);//得到高位数            low = n - (n / i) * i;//低位数            if (current > 1)                count = count + (high + 1) * i;            else if (current == 0)                count = count + high * i;            else if(current == 1)                count = count + high * i + low + 1;            i = i * 10;        }        return count;    }        public static void main(String[] args){        long num = 12;        long mm = System.currentTimeMillis();        System.out.println(new NumberOf1Between1AndN().CountOne(num));        System.out.println("m2 " + (System.currentTimeMillis() - mm));    }}

 

转载于:https://www.cnblogs.com/woniu4/p/4640663.html

你可能感兴趣的文章
iOS 设计模式之单例
查看>>
POJ 1664 放苹果
查看>>
Pthon3各平台的安装
查看>>
python编程快速上手之第11章实践项目参考答案(11.11.3)
查看>>
JS 之CLASS类应用
查看>>
一个tga工具
查看>>
64bit CPU 知识 (IA32,IA64,EM64T,AMD64)
查看>>
结构体 枚举
查看>>
srtlen实现以及与sizeof的比较
查看>>
linux+win7双系统重装win7修复grub的办法
查看>>
让应用在横屏模式下启动
查看>>
日常练习 1.0
查看>>
php集成环境
查看>>
Ubuntu下的负载均衡Web集群配置
查看>>
mvc的个别对输入数据的验证
查看>>
autoit学习安装说明及例子
查看>>
jQuery控制form表单元素聚焦
查看>>
wpf+.net 4.5 surface2.0 = 异步多点触控 时间轴 part1
查看>>
05.SSL或TTL应用编程
查看>>
PostgreSQL自学笔记:5 数据类型和运算符
查看>>