剑指Offer30 从1到n整数出现1的个数
/*************************************************************************
> File Name: 30_NumerOf1.c
> Author: Juntaran
> Mail: JuntaranMail@gmail.com
> Created Time: 2016年09月01日 星期四 20时46分06秒
************************************************************************/ #include <stdio.h> // 计算1在n中出现的次数
int CountOne(int n)
{
int count = ;
for (; n > ; n /= )
{
if (n % == )
count ++;
}
return count;
} int NumberOfOne(int n)
{
if (n <= )
return ;
int count = ;
for (int i = ; i <= n; ++i)
count += CountOne(i); printf("1 appear %d times\n", count);
return count;
} /*
数学公式法:
设定整数点(如1、10、100等等)作为位置点i(对应n的各位、十位、百位等等),
分别对每个数位上有多少包含1的点进行分析
根据设定的整数位置,对n进行分割,分为两部分,高位n/i,低位n%i 当i表示百位,且百位对应的数>=2,如n=31456,i=100,则a=314,b=56,
此时百位为1的次数有a/10+1=32(最高两位0~31),
每一次都包含100个连续的点,即共有(a%10+1)*100个点的百位为1 当i表示百位,且百位对应的数为1,如n=31156,i=100,则a=311,b=56,
此时百位对应的就是1,则共有a%10(最高两位0-30)次是包含100个连续点,
当最高两位为31(即a=311),本次只对应局部点00~56,共b+1次,
所有点加起来共有(a%10*100)+(b+1),这些点百位对应为1 当i表示百位,且百位对应的数为0,如n=31056,i=100,则a=310,b=56,
此时百位为1的次数有a/10=31(最高两位0~30) 综合以上三种情况,当百位对应0或>=2时,有(a+8)/10次包含所有100个点,
还有当百位为1(a%10==1),需要增加局部点b+1 之所以补8,是因为当百位为0,则a/10==(a+8)/10,当百位>=2,补8会产生进位位,
效果等同于(a/10+1)
*/ int NumberOfOne2(int n)
{
int count = ;
for (long long m = ; m <= n; m *= )
{
count = count + (n/m + ) / * m + (n/m % == ) * (n%m + );
}
printf("1 appear %d times\n", count);
return count;
} int main()
{
int n = ;
NumberOfOne(n);
NumberOfOne2(n);
}
剑指Offer30 从1到n整数出现1的个数的更多相关文章
- 剑指 Offer 43. 1~n 整数中 1 出现的次数 + 数位模拟 + 思维
剑指 Offer 43. 1-n 整数中 1 出现的次数 Offer_43 题目描述 题解分析 java代码 package com.walegarrett.offer; /** * @Author ...
- 剑指Offer30——包含min函数的栈
剑指Offer30--包含min函数的栈 1. 题目简述 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数在该栈中,调用min.push及pop的时间复杂度是O(1). 2. 题 ...
- 剑指Offer - 九度1513 - 二进制中1的个数
剑指Offer - 九度1513 - 二进制中1的个数2013-11-29 23:35 题目描述: 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 输入: 输入可能包含多个测试样例. ...
- 剑指offer-面试题11.数值的整数次方
题目:实现函数double Power(double base,int exponent),求base的 exponent次方.不得使用库函数,同时不需要考虑大数的问题. 这道题看似很简单: 然而需要 ...
- 剑指Offer 把字符串转换成整数
题目描述 将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数. 数值为0或者字符串不是一个合法的数值则返回0 输入描述: 输入一个字符串,包括数字字母符号,可以为空 输出描述: 如果是合法 ...
- 剑指offer 12:数值的整数次方
题目描述 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. public class Solution { public double P ...
- 剑指Offer——把字符串转换成整数
题目描述: 将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数. 数值为0或者字符串不是一个合法的数值则返回0 输入描述: 输入一个字符串,包括数字字母符号,可以为空 输出描述: 如果 ...
- 剑指offer--30.二叉搜索树的后序遍历序列
正常情况下,因为二叉搜索树,左子树所有结点比根小,右子树所有结点比根大,所以循环一遍就能结束 ----------------------------------------------------- ...
- 剑指offer--15.把字符串转换成整数
stringstream做这个真的很舒服 ------------------------------------------------------------------------------- ...
随机推荐
- JSP中的TAG
http://blog.csdn.net/hongweigg/article/details/12006849 JSP标签有两种实现方法,一种是使用tag 文件,一种是使用tld文件. 1.使用tag ...
- css3 过度效果之物体向上冒出
<!DOCTYPE HTML> <html> <head> <meta charset="utf-8"/> <meta nam ...
- pic/at89c2051 programmer
http://dangerousprototypes.com/forum/viewtopic.php?t=170 It looks like the PICKIT2 uses a small boos ...
- 【转】JAVA SSH 框架介绍
转自:http://www.admin10000.com/document/150.html SSH 为 struts+spring+hibernate 的一个集成框架,是目前较流行的一种JAVA W ...
- jQuery打印Html页面自动分页
最近项目中需要用到打印HTML页面,需要指定区域打印,使用jquery.PrintArea.js 插件 用法: $("div#printmain").printArea(); 但还 ...
- Android图片圆角效果
一般来说图片加圆角可以使用 Java 的方式来进行, 对图片略加处理即可, 但也可以使用纯XML+Nice-Patch图片来进行, 这样的速度会更快. 如果背景是纯色的情况下建议使用此方法. 原理则是 ...
- 【CSS系列-选择器优先级总结】
转:http://www.cnblogs.com/dolphinX/p/3511300.html 容易被忽略CSS特性 CSS初学感觉很简单,但随着学习的深入才感觉CSS的水由多深,平常总会遇到各 ...
- 用SecureCRT来上传和下载数据
借助securtCRT,使用linux命令sz可以很方便的将服务器上的文件下载到本地,使用rz命令则是把本地文件上传到服务器. 其中,对于sz和rz的理解与记忆我用了如下的方法(很多时候容易搞混): ...
- lucene合并测试的总结
1 查询的总时间等于每个segment查询时间的总和 2 合并的步骤 (1)做flush操作的先生成一个新的segment (2)检查在新segment之前已经存在的segment的数 ...
- IE9-10 option BUG
IE 9-10下如果option元素没有定义value而在设置innerText时没有把两边的空白去掉,那么 取el.text,浏览器会进行trim, 并且伪造一个value值,此值会在刚才trim的 ...