题目描述

求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数(从1 到 n 中1出现的次数)。

题目解答

设N = abcde。 如果要计算百位上1出现的次数,分为以下三类:百位上的数字,百位以下(低位)的数字,百位以上(高位)的数字。

① 如果百位上数字为0,百位上可能出现1的次数由更高位决定。

比如:12013,则可以知道百位出现1的情况可能是:100~199,1100~1199,2100~2199,,...,11100~11199,一共1200个。

可以看出是由更高位数字(12)决定,并且等于更高位数字(12)乘以 当前位数(100)。

② 如果百位上数字为1,百位上可能出现1的次数不仅受更高位影响还受低位影响。

比如:12113,则可以知道百位受高位影响出现的情况是:100~199,1100~1199,2100~2199,,....,11100~11199,一共1200个。和上面情况一样,并且等于更高位数字(12)乘以 当前位数(100)。

但同时它还受低位影响,百位出现1的情况是:12100~12113,一共114个,等于低位数字(113)+1。

③ 如果百位上数字大于1(2~9),则百位上出现1的情况仅由更高位决定,比如12213,则百位出现1的情况是:100~199,1100~1199,2100~2199,...,11100~11199,12100~12199,一共有1300个。

等于更高位数字+1(12+1)乘以当前位数(100)。

public class Solution {public int NumberOf1Between1AndN_Solution(int n) {int count=0;//1的个数int i=1; //当前位int current=0,before=0,after=0;while((n/i)!=0){current=(n/i)%10; //当前位数字before=n/(i*10); //高位数字after=n-(n/i)*i; //低位数字//如果为0,出现1的次数由高位决定,等于高位数字*当前位数if(current==0){count+=before*i;}//如果为1,出现1的次数由高位和低位决定,高位*当前位数+低位+1else if(current==1){count+=before*i+after+1;}//如果大于1,出现1的次数由高位决定,(高位数字+1)*当前位数else{count+=(before+1)*i;}//前移一位i=i*10;}return count;}
}

转载于:https://www.cnblogs.com/chanaichao/p/10217941.html

31.整数中1出现的次数(从1到n整数中1出现的次数)相关推荐

  1. 找出一个字符串中出现次数最多的字_海量数据中找出前k大数(topk问题)

    在海量数据中找出出现频率最好的前k个数,或者从海量数据中找出最大的前k个数,这类问题通常被称为top K问题. 针对top K类问题,通常比较好的方案是分治+Trie树/hash+小顶堆(就是上面提到 ...

  2. 算法学习之 Python 实现单词分析-找出现次数最多的字母的 n 中方式

    差点忘了我可是要打蓝桥杯的人,快临阵磨枪一下 单词分析-找出现次数最多的字母 题目描述 小蓝正在学习一门神奇的语言,这门语言中的单词都是由小写英文字母组 成,有些单词很长,远远超过正常英文单词的长度. ...

  3. 查找txt中的中文字符_找出nginx请求日志中某个url请求总次数排名前十的ip地址...

    答案如下: # 利用linux自带命令:sort.awk.grep.head.uniq组合得出相应的答案 awk '{print $1}' | grep 'www.xxxx.com' access.l ...

  4. C++实现输入两个整数n和m,从数列1,2,3...n中随意取几个数,使其和等于m,要求列出所有的组合

    题目:C++实现输入两个整数n和m,从数列1,2,3...n中随意取几个数,使其和等于m,要求列出所有的组合 用到了组合的思想 #include<iostream> #include< ...

  5. C语言试题十五之编写函数void function(int x,int pp[],int *n),求出能整除x且不是偶数的各整数,并按从小到大的顺序放在pp所指的数组中,这些除数的个数通过形参n返回

    1. 题目 请编写函数void function(int x,int pp[],int *n),它的功能是:求出能整除x且不是偶数的各整数,并按从小到大的顺序放在pp所指的数组中,这些除数的个数通过形 ...

  6. LoadRunner中Action的迭代次数的设置和运行场景中设置

    LoadRunner中Action的迭代次数的设置和运行场景中设置 LoadRunner是怎么重复迭代和怎么增加并发运行的呢? 另外,在参数化时,对于一次压力测试中均只能用一次的资源应该怎么参数化呢? ...

  7. 在编程竞赛中,有6个评委为参赛的选手打分,分数为0-100的整数分。 * (静态初始化一个数组,在数组中随意写入6个分数) 选手的最后得分为: * 去掉一个最高分和一个最低分后 的4个评委平均值。

    package Day05;/*** 5.* 需求:在编程竞赛中,有6个评委为参赛的选手打分,分数为0-100的整数分.* (静态初始化一个数组,在数组中随意写入6个分数) 选手的最后得分为:* 去掉 ...

  8. js获取字符串出现次数最多_js如何获取字符串中出现次数最多的字符

    我是一个不太会表达的人,所以我尽可能的用代码来阐释我的理解和思考,废话不多说,我就直接放代码了: function getStingMax(str){ if(typeof str !== " ...

  9. python整数类型没有取值范围限制_详解Python中6种数据类型

    Python中数据类型主要有六种:数字类型,字符串类型,元组类型,列表类型,文件类型和字典类型,我们今天先介绍前四种类型. 假如在Python程序中,出现了"010",那么这个&q ...

  10. java+txt+词语+次数_Java练习2--读取txt文件统计考勤次数并写入一个txt文件中

    Java练习2--读取txt文件统计考勤次数并写入一个txt文件中 Java练习2--读取txt文件统计考勤次数并写入一个txt文件中 面向对象的小练习: 文件attendance.txt中的数据为本 ...

最新文章

  1. 10个比较艰难的Java面试题与答案!
  2. python可以做什么系统-用python做推荐系统(一)
  3. oracle expdp 39002,expdp 导入数据时ORA-39002、ORA-39070错误排查
  4. python链家网高并发异步爬虫and异步存入数据
  5. 【Protocol Buffer】Protocol Buffer入门教程(五):repeated限定修饰符
  6. python 3.6.5编译安装_Linux系统安装Python3.6.5
  7. CListControl的OnMouseMove和OnNcHitTest
  8. python 编辑距离_最小编辑距离python
  9. 2020快手汽车行业数据价值报告
  10. ACL 2021 | 丁香园知识增强预训练模型
  11. CCS6.0安装教程
  12. ubuntu安装nvidia显卡驱动注意事项以及关闭ubuntu内核自动更新
  13. linux 755是什么意思
  14. 小米SN保修_一次真实但糟糕的小米笔记本售后
  15. 细说php作者高洛峰免费收徒
  16. 浙江万里学院计算机期末考,期末复习看这一篇推送就够了
  17. 「牛客网C」初学者入门训练BC156
  18. 有关B2C制造业电商企业的数字化转型思考
  19. 苹果电脑硬盘损坏数据是否可以恢复
  20. 冯巩的155句经典语,太有才了

热门文章

  1. CTO:不要在代码中写 set/get 方法了,逮一次罚款...
  2. MySQL 事务的实现原理,写得太好了!
  3. 特别实用的几种SQL语句送给大家,让你的SQL高大上!
  4. Java Web架构演变
  5. Java虚拟机最多支持多少个线程?
  6. 这几个问题解决了,怎么设计大型网站架构不再是困难
  7. 上海名媛群事件是真实的么?
  8. windows7蓝牙怎么打开_PC版微信v2.7.0曝光:支持电脑上打开小程序
  9. RenderSettings 渲染设置
  10. 西方主要管理思想简介