上面的那种各个数据进行遍历的方法,耗时,

我们可以通过根据数的规律进行观察是否存在某种规律:

当N是1位数的情况:

如果N=3,那么从1到3的所有数字总,1,2,3,只有你个位数字的出现的个数是1,

当N=9时,出现1的个数也是1个。

当N是两位数的时候:

当是两位数的时候,个位和十位上都可能出现1,我们分开考虑,

当N=33时,所有数中个位出现1的个数是4,在十位上出现1的个数是10,总数是14

当N=55式,个位数上出现1的个数是6,十位上出现1的个数是10,总数是16

sum(19)=个位出现的个数+十位出现的个数=2+10=12

sum(29)=个位出现的个数+十位出现的个数=3+10=13

sum(39)=个位出现的个数+十位出现的个数=4+10=14

。。。。。。。。。。。。。。

sum(99)=个位出现的个数+十位出现的个数=10+10=20

当N是三位数的时候:

分别统计百位、十位‘个位上1的个数

9以下:                                                                     1个

99以下:                                                                     1*10+10*1=20个

999以下:                                                                      100*1+10*20=300个

9999以下:                                                                         1*1000+10*30=4000个

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

9999999999以下:                                                                      9000000个

999999999999以下:                                                                  100000000个

当n增加10,至少增加1个1

当n增加100,至少增加20个1

当n增加1000,至少增加300个1

当n增加10^k,时,至少增加k*10^k-1个1

代码:

int coutinter(int n)
{int count = 0;int ifactor = 1;int islower = 0;int icurrnum = 0;int ihigh = 0;while (n / ifactor != 0){islower = n - (n / ifactor)*ifactor;icurrnum = (n / ifactor) % 10;ihigh = n / (ifactor * 10);switch (icurrnum){case 0:count += ihigh*ifactor;break;case 1:count += ihigh*ifactor + islower + 1;break;default:count += (ihigh + 1)*ifactor;break;}ifactor *= 10;}
}

十进制中正整数N中1的个数(2)相关推荐

  1. 十进制中正整数N中1的个数

    问题: 给定一个十进制正整数N,写下从一开始到N过程中所有1的个数? 例如: N=2,写下1,2,出现了1个1 N=12,写下1,2,3,4,5,6,7,8,9,10,1,1,12,这里面1的个数是5 ...

  2. (C语言)素数是指大于1,且只能被1和它自身整除的正整数。现给定一个范围,请输出在此范围中素数的个数。

    题目描述: 素数是指大于1,且只能被1和它自身整除的正整数.现给定一个范围,请输出在此范围中素数的个数. 输入: 测试数据有多组,每组单独占一行,包括两个正整数m和n(2≤m,n≤10000),中间用 ...

  3. 斐波那契数列_菲波那契数列是指这样的数列: 数列的第一个和第二个数都为1,接下来每个数都等于前面2个数之和。给出一个正整数a,要求菲波那契数列中第a个数对1000取模的结果是多少。

    描述 菲波那契数列是指这样的数列: 数列的第一个和第二个数都为1,接下来每个数都等于前面2个数之和.给出一个正整数a,要求菲波那契数列中第a个数对1000取模的结果是多少. 格式 输入格式 第1行是测 ...

  4. 题目42:菲波那契数列是指这样的数列: 数列的第一个和第二个数都为1,接下来每个数都等于前面2个数之和。给出一个正整数k,要求菲波那契数列中第k个数是多少。

    题目转载:http://python.wzms.com/s/1/35 题目描述: 菲波那契数列是指这样的数列: 数列的第一个和第二个数都为1,接下来每个数都等于前面2个数之和. 给出一个正整数k,要求 ...

  5. 编程之美读书笔记2.1—求二进制数中1的个数

    解法一: 可以举一个8位二进制的例子.对于二进制操纵,我们除以一个2,原来数字就会减少一个0(向右移一位).如果除的过程中有余,那么久表示当前位置有一个1. 以10100010为例: 第一次除以2时, ...

  6. 求数组最大数,该数为数组中某两个数相加

    题目: 百度笔试:在一个正整数集合S中,找出一个最大数C,使得C=A+B,其中A和B也是S种的元素. 思想: 首先,我们将数组从小到大进行快速排序.其次: 1.将最后一个数设为最大数设定为S: 2.用 ...

  7. 检测数(二进制形式)中1的个数

    2019独角兽企业重金招聘Python工程师标准>>> 规律:二进制中1的个数,比如100(对应十进制的4)求它中1的个数就 100 & (100-001)就行 packag ...

  8. 题库练习5(句子逆序、字符串排序、int型二进制表示中1的个数、购物单)

    1. 句子逆序 将一个英文语句以单词为单位逆序排放.例如"I am a boy",逆序排放后为"boy a am I".所有单词之间用一个空格隔开,语句中除了英 ...

  9. 求二进制数中1的个数

    <<编程之美>>中有这么个题目:对于一个字节的无符号整形变量,求其二进制表达形式中"1"的个数. 基础算法:辗转相除法 辗转相除法是十进制采用的算法,该算法 ...

最新文章

  1. Rocksdb 的一些参数调优策略
  2. R语言ggplot2可视化:使用堆叠的条形图(Stacked Barplot)可视化每个数据行(row)的缺失值的情况(Visualizing missing data counts in rows)
  3. CodeForces - 1316D Nash Matrix(构造+dfs)
  4. 请输入星期的第一个字母c语言,C语言经典案例:请输入星期几的第一个字母来判断一下是星期几,...
  5. IPv6转换服务正式发布
  6. 腾讯地图api-前端定位组件
  7. 大厂难进,Java面试该如何一面即中?
  8. 实习成长之路:MySQL十三: count(*)这么慢,我该怎么办?为什么那么慢?
  9. 简述python2.x和python3.x的区别_python面试题Python2.x和Python3.x的区别
  10. java 最新Xss攻击与防护(全方位360°详解)
  11. 屏幕录制软件哪个好?
  12. 惩罚函数将有约束优化转化为无约束优化问题
  13. 机器学习之层次聚类及代码示例
  14. Metasploit -- 渗透攻击模块(exploit)
  15. 计算机专业java论文题目_计算机专业毕业设计题目选题
  16. K8S学习之容器探测 livenessProbe、readinessProbe、startupProbe、lifecycle
  17. Error creating bean with name ‘processEngine‘: FactoryBean threw exception on object creation; neste
  18. 本土战略 Ubuntu创始人宣布将发中国版
  19. 面试:GET 请求能上传图片吗,已解决
  20. 关于高电平与低电平的使用

热门文章

  1. 环境测试明日最后一天 16万次公交车确保市民出行
  2. Android开发概要记录
  3. 软件工程师到30岁就要转行?
  4. 01pxc集群的部署
  5. 【学习/模板】tarjan割点
  6. 前端知识点总结—-响应式
  7. 地市级地铁数据管理信息系统解决方式
  8. 用Python玩转词云
  9. DeepReID (2014 CVPR)
  10. Class Activation Mapping (CNN可视化) Python示例