面试题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 ...
随机推荐
- Laravel5.2 下使用Form
laravel到了5.1.*以上版本,便没有了illuminate/html类库的支持, 我试着把illuminate/html类库加入了laravel5.2,依然没有用, 但是laravelcoll ...
- Linux + Apache + MySql+ Php 配置虚拟主机
win7:------------------------------------------------------------------------ NameVirtualHost *:80&l ...
- Python初体验_基础(一)
一:变量 变量的赋值: name = "Meng" 上述代码声明了一个变量,变量名为name,变量name的值为:"Meng" 变量定义: 一个在内存存数据的容 ...
- javascript 知识点坑
1. JavaScript事件属性 event.target 当目标事件发生span里面 当目标事件发生在main里面 e.target; // 目标节点DOM结构 e.target.id; // ...
- RedHat下GCC及G++的安装
GCC的安装: 切换到安装光盘目录下: #mount /dev/cdrom /mnt/cdrom #cd /mnt/cdrom 安装GCC依赖的*rpm程序,必须按照顺序依次执行: #rpm - ...
- AsyncHttpClient httpURLCon httpClient AsyncTask 访问服务器
Activity /** * 测试使用三种方式(AsyncHttpClient.httpURLCon.httpClient)分别以get和post方式访问服务器 * @author 白乾涛 */ ...
- 规约模式(Specification Pattern)
前期准备之规约模式(Specification Pattern) 一.前言 在专题二中已经应用DDD和SOA的思想简单构建了一个网上书店的网站,接下来的专题中将会对该网站补充更多的DDD的内容.本专题 ...
- C#多线程实践——创建和开始使用
线程用Thread类来创建, 通过ThreadStart委托来指明方法从哪里开始运行.ThreadStart的声明如下: public delegate void ThreadStart(); 调用S ...
- MVC校验特性
1.前端引入3个脚本 ①jq脚本 ②jQuery.Validate.js ③jquery.validate.unobtrusive.js(异步验证) 2.后端加特性 在表对应的Mod ...
- C#摇奖程序
private void Form1_Load(object sender, EventArgs e) { //取消跨线层访问控件的判断 Control.CheckForIllegalCrossThr ...