在从1到n的正数中1出现的次数 【微软面试100题 第三十题】
题目要求:
给定 一个十进制正整数N,写下从1开始,到N的所有整数,然后数一下其中出现的所有“1”的个数。
例如:N = 2,写下1,2.这样只出现了1个“1”。
N = 12,我们会写下1,2,3,4,5,6,7,8,9,10,11,12.这样,1的个数是5.
参考资料:编程之美2.4 1的数目
题目分析:
方法1:遍历从1~N的所有数,每个数对10取余,如果余数为1,则有一个1.

方法2:只分析N,不用逐个遍历。怎么分析呢?把N按个位、十位、百位、、、等来估算从1~N的所有数的个位、十位、百位、、、的每一位的1的总数。其中每一位又和它的高位和低位和本位都有关系,如:所有的十位的1的总和,可能和比它低的个位有关,可能和十位本身有关,可能和比十位大的百位、千位有关。。。

代码实现:
方法1代码:
#include <stdio.h> int Count1(int n)
{
int iNum=;
while(n!=)
{
iNum += ((n% == )?:);
n/=; }
return iNum;
} int Count2(int n)
{
int iCount=,i;
for(i=;i<=n;i++)
{
iCount+=Count1(i);
}
return iCount;
} int main()
{
int i; for(i = ;i < ;i++)
{
printf("%d里面含有 %d 个1\n",i,Count2(i));
} return ;
}
方法2代码:
#include <stdio.h> int Sumls(int n)
{
int iCount=,iFactor=,iLowerNum=,iCurrNum=,iHigherNum=;
while(n/iFactor!=)
{
iLowerNum=n-(n/iFactor)*iFactor;
iCurrNum=(n/iFactor)%;
iHigherNum=n/(iFactor*); switch(iCurrNum)
{
case :
iCount+=iHigherNum*iFactor;
break;
case :
iCount+=iHigherNum*iFactor+iLowerNum+;
break;
default:
iCount+=(iHigherNum+)*iFactor;
break; }
iFactor*=; }
return iCount;
} int main()
{
int i; for(i = ;i < ;i++)
{
printf("%d里面含有 %d 个1\n",i,Sumls(i));
} return ;
}
在从1到n的正数中1出现的次数 【微软面试100题 第三十题】的更多相关文章
- 【编程题目】在从 1 到 n 的正数中 1 出现的次数
30.在从 1 到 n 的正数中 1 出现的次数(数组)题目:输入一个整数 n,求从 1 到 n 这 n 个整数的十进制表示中 1 出现的次数.例如输入 12,从 1 到 12 这些整数中包含 1 的 ...
- 25.在从1到n的正数中1出现的次数[NumberOf1Between1_N]
[题目] 输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数.例如输入12,从1到12这些整数中包含1 的数字有1,10,11和12,1一共出现了5次. [分析] 这是一道广为流传的goo ...
- Google面试题:计算从1到n的正数中1出现的次数
题目: 输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数.例如输入12,从1到12这些整数中包含1 的数字有1,10,11和12,1一共出现了5次. 找工作,准备看写题目,题目说是Goo ...
- 【google面试题】求1到n的正数中1出现的次数的两种思路及其复杂度分析
问题描写叙述: 输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数.比如输入12,从1到12这些整数中包括1 的数字有1.10.11和12.1一共出现了5次. 这是一道广为流传的googl ...
- 在从1到n的正数中1出现的次数
#include <iostream> using namespace std; int cal1From0ToN(int n) { int pow1 = 1; int pow2 = 10 ...
- 和为n连续正数序列 【微软面试100题 第五十一题】
题目要求: 输入一个正数n,输出所有和为n连续正数序列(至少两个). 例如输入15,由于1+2+3+4+5 = 4+5+6 = 7+8 = 15.所以输出3个连续序列1~5,4~6,7~8. 参考资料 ...
- 链表中倒数第k个结点 【微软面试100题 第十三题】
题目要求: 输入一个链表,输出该链表中倒数第k个结点.链表的倒数第0个结点为链表的尾指针. 参考资料:剑指offer第15题 题目分析: 1.两个指针,第一个先走k步,然后两个指针同时走,直到第一个走 ...
- 九度OJ 1373 整数中1出现的次数(从1到n整数中1出现的次数)
题目地址:http://ac.jobdu.com/problem.php?pid=1373 题目描述: 亲们!!我们的外国友人YZ这几天总是睡不好,初中奥数里有一个题目一直困扰着他,特此他向JOBDU ...
- 【强烈推荐】《剑指Offer:名企面试官精讲典型编程题》一书中IT名企经典面试题
各位程序猿: <剑指Offer>一书源自该书作者何海涛坚持更新与编写的博客(http://zhedahht.blog.163.com/),该博客收集整理了大量如微软.Goo ...
随机推荐
- springboot 学习笔记(二)
springboot 学习笔记(二) 快速创建一个springboot工程,并引入所需要的依赖 1.利用Spring initializr 来创建一个springboot项目,登陆http://sta ...
- PHP变量、数据类型、字符串、运算符、条件语句、循环语句、数组、函数
PHP 简介: php :是一门动态交互的计算机语言 静态交互 html css js 但凡是动态交互的 都需要服务器. php都是以.php结尾的文件 Html文件里不能写php代码,但是ph ...
- uvm_mem_mam——寄存器模型(十三)
有了存储器模型,再来看看存储器的管理 //------------------------------------------------------------------------------ ...
- -oN ,-oX,-oG
-oN ,正常输出 -oX, xml输出 nmap 192.168.9.12 -oX TEST.xml -oG grep输出 html文件可读性比xml文件要好,将xml转换成html xs ...
- (六)我的JavaScript系列:更好的JavaScript之CoffeeScript
世界上的很多天才都在为构建更好的JavaScript而努力.已经有了很多尝试,其中最有前途的,无非就是CoffeeScript和TypeScript了.面对CoffeeScript,我有一见如故的感觉 ...
- 基于FPGA的DDS任意波形发生器设计
一.简介 DDS技术最初是作为频率合成技术提出的,由于其易于控制,相位连续,输出频率稳定度高,分辨率高, 频率转换速度快等优点,现在被广泛应用于任意波形发生器(AWG).基于DDS技术的任 ...
- java面试题(杨晓峰)---第二讲Exception和Error有什么区别?
本人总结: Exception和Error:正常问题和意外问题,以自行车举例:没气和爆胎. ①理解Throwable,Exception,Error的设计和分类. ②掌握哪些应用最广泛的子类, ③如何 ...
- 将C4C Service Request中的summary和其他附件同步到ERP的Billing Request去
C4C里将Service Request称为Work Ticket. 比如现在我的Service Request有两个行项目,只有第一个需要同步到ERP去.但是第二个行项目对于客户检查Invoice来 ...
- java.lang.ClassCastException: com.ch.hibernate.Student_$$_javassist_0 cannot be cast to javassist.util.proxy.Proxy
利用query动态查询时,报错 java.lang.ClassCastException: com.ch.hibernate.Student_$$_javassist_0 cannot be cast ...
- 读书笔记2013-2 Linux内核设计与实现A
读书笔记2013-2 Linux内核设计与实现A <Linux内核设计与实现> 简介 这本书不是想Linux源码剖析那样一行行分析Linux源代码的书,而是从Linux历史,Linux哲学 ...