面试题32.从1到n整数中1出现的次数
题目:输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数。例如输入12,从
1到12这些整数中包含1的数字中1,10,11和12,1一共出现了5次
本题可以直接变量1到n的n个数然后分别计算每个数中1的个数,然而这种方法是效率很低下的
书上给出了一共方法,去找数n各个位置上出现1的规律,在这里我就不再描述具体的规律推倒
过程,只是给出这样一个普遍性的规律。
1.对每一位上面的数字,当该数字等于零时,该位上1的个数等于 高位*该位的位数
2.对每一位上面的数字,当该数字等于1时,该位上1的个数等于 高位*该位的位数+低位数加1
3.对每一位上面的数字,当该数字等于非0非1时,该位上1的个数等于 (高位+1)*该位的位数
例如52014
该数字十位数为1,那么十位上1的个数=(520)*10+(4+1)=5205
该数字百位数为0,那么百位上1的个数=(52)*100=5200
该数字千位数为2,那么千位上1的个数=(5+1)*1000=6000
该数字个位数为4,那么个位上1的个数=(5201+1)*1=5202
该数字万位上为5,那么万位上1的个数=(0+1)*10000=10000
那么1-52014中所有1的个数为:5205+5200+6000+5202+10000=31607
实现代码如下:
#include <iostream>
using namespace std; int CountOneSum(int Number)
{
int HighPos=;
int LowPos=;
int count=;
int CurrPos=; int k=; while(Number/k!=)
{
LowPos=Number-(Number/k)*k;
CurrPos=(Number/k)%;
HighPos=Number/(k*); switch(CurrPos)
{
case :
count+=(HighPos*k);
break;
case :
count+=(HighPos*k+LowPos+);
break;
default:
count+=((HighPos+)*k);
} k=k*;
}
return count;
} int main (int argc, char* argv[])
{
int num;
cout<<"Please input the number you want to count '1': ";
cin>>num;
int OneCount=;
OneCount=CountOneSum(num);
cout<<"The Count of '1' is: "<<OneCount<<endl;
system("pause");
return ;
}
运行截图:

面试题32.从1到n整数中1出现的次数的更多相关文章
- 剑指Offer:面试题32——从1到n整数中1出现的次数(java实现)
问题描述: 输入一个整数n,求1到n这n个整数的十进制表示中1出现的次数.例如输入12,从1到12这些整数中包含1的数字有1,10,11,12,1一共出现了5次. 思路:(不考虑时间效率的解法,肯定不 ...
- 【剑指Offer面试编程题】题目1373:整数中1出现的次数--九度OJ
题目描述: 亲们!!我们的外国友人YZ这几天总是睡不好,初中奥数里有一个题目一直困扰着他,特此他向JOBDU发来求助信,希望亲们能帮帮他.问题是:求出1~13的整数中1出现的次数,并算出100~130 ...
- 剑指Offer的学习笔记(C#篇)-- 整数中1出现的次数(从1到n整数中1出现的次数)
题目描述 求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1.10.11.12.13因此共出现6次,但是对于后面问题他就没辙了. ...
- 【剑指Offer】31、从1到n整数中1出现的次数
题目描述: 求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1.10.11.12.13因此共出现6次,但是对于后面问题他 ...
- 【剑指Offer面试题】 九度OJ1517:链表中倒数第k个结点
鲁棒性是指程序可以推断输入是否符合规范要求,并对不和要求的输入予以 合理的处理. 题目链接地址: http://ac.jobdu.com/problem.php?pid=1517 题目1517:链表中 ...
- 剑指offer——面试题32.1:分行从上到下打印二叉树
void BFSLayer(BinaryTreeNode* pRoot) { if(pRoot==nullptr) return; queue<BinaryTreeNode*> pNode ...
- 剑指offer——面试题32:从上到下打印二叉树
void BFS(BinaryTreeNode* pRoot) { if(pRoot==nullptr) { cout<<"empty binary tree!"< ...
- 【剑指offer 面试题38】数字在排序数组中出现的次数
思路: 利用二分查找,分别查找待统计数字的头和尾的下标,最后做差加一即为结果. C++: #include <iostream> #include <vector> using ...
- 剑指offer——面试题15.2:判断两个整数m和n的二进制中相差多少位
#include"iostream" using namespace std; int CountDifferentBit(int m,int n) { ,diff=m^n; wh ...
随机推荐
- windows server2012域服务器降级的方法
最近在一个新的网络环境里建立windows域服务器,准备建立主.备两台域服务器.在一台新服务器上面安装了windows2012R2并配置了DC服务.域和林的级别设置为Windows2012R2级别.在 ...
- Python 获取Facebook用户的Friends的爱好中的Top10
CODE; #!/usr/bin/python # -*- coding: utf-8 -*- ''' Created on 2014-8-12 @author: guaguastd @name: f ...
- resin4 简单学习
1.Resin 4.0.26 Resin是CAUCHO公司的产品,是一个非常流行的application server,对servlet和JSP提供了良好的支持,性能也比较优良,resin自身采用JA ...
- android Settings 解析
1.Settings的主界面的实现: Settings采用了PreferenceActivity和PreferenceFragment结合的实现方式. Settings.java继承自Preferen ...
- 关于 视频同步vsync 信号在不同一时候钟域採样问题
今天调试 视频 4k(3840 x 1920)的vsync信号(时钟为 297Mhz) 进入 170Mhz 的时钟域, 发现输出来的信号信号抖动特别厉害.后来才发现这是不同一时候钟域 造成的影响. 快 ...
- javaScript模块化一
1. Module模式的基本特性 A) 模块化 可重用 B) 封装了变量和function 和全局的namespace不接触 松耦合. C) 只暴露可用public的方法 其他私有方法全部隐藏 ...
- css布局&初始化&基准样式
学习css布局比较好的网站 学习css布局 1.css设置模块 typography(字体) colour(颜色) link(链接) forms(表单) layout(布局) navigation(导 ...
- SearchBox( 搜索框) 组件
一. 加载方式//class 加载方式<input id="ss" class="easyui-searchbox" style="width: ...
- js字符串转json
1,eval方式解析,这是最早的解析方式了.如下: 代码如下: function strToJson(str){ var json = eval('(' + str + ')'); return js ...
- 图片设置3D效果
/** * 图片绘制3d效果 * @param srcImage * @param radius * @param border * @param padding * @return * @throw ...