求1的数目
来源:互联网 发布:出国推荐信 知乎 编辑:程序博客网 时间:2024/04/28 20:37
题目:
给定一个十进制的正整数N,求从1开始到N的所有整数中,出现1的个数。
如:N=2,即1,2,出现1个1
N=12,即1,2,3,4,5,6,7,8,9,10,11,12,出现5个1.
写一个函数f(N),返回1到N之间出现1的个数,如f(12)=5.
注意:请你在写完基本功能代码V1.0版本后进行压力测试,看看当N=100000000和N=1000000000你的代码还能否运算出结果。如果无法在短时间内运算出结果,请你改进算法,完成一个能通过压力测试的v2.0版本代码。
代码如下:
#include "stdio.h"int main(){__int64 i,a,b,c,num,count=0;scanf("%I64d",&num);for(i=10;i<=10000000000;i*=10){a=num/i;b=(num-a*i)/(i/10);c=num%(i/10);switch(b){case 0:count+=a*i/10;break;case 1:count+=a*i/10 + c+1;break;default :count+= ( a+1 )*i/10;}if(num/i<=0)break;}printf("%I64d\n",count);return 0;}
设count为1的总个数,i=1,10,100,1000......
当b==0时,n += a*i;
当b==1时,n += a*i+c+1;
当b>=2时,n += (a+1)*i;
计算个位数(i=1)时,将12305分为a:1230 b:5 c:0
因为b>=2
n += (a+1)*i;
计算十位数(i=10)时,将12305分为a:123 b:0 c:5
因为b==0
n += a*i;
.
.
.
计算万位时(i=10000)时,将12305分为a:0 b:1 c:2305
因为b==1
n += a*i+c+1;
n即为1的总个数。
0 0
- 求1的数目
- 编程之美---求1的数目
- 编程之美---求1的数目
- 求分割的数目
- 求树的子树数目
- 递归,求1到10所以数目的阶乘
- 编程之美 2.4 -----求1的数目
- 求一个数被置为1的bit数目
- 树-----求叶子结点数目,结点数目,树的高度
- 求一个图中的环的数目
- 求两个年份之间闰年的数目
- 求二叉树的叶子节点数目
- 1的数目
- 1的数目
- 1的数目
- 1的数目
- 1的数目
- 1的数目
- Java 之 FileReader FileInputStream InputStreamReader BufferedReader 作用与区别
- Oracle基础学习3--Oracle创建用户并授权
- Java内存结构
- Servlet入门
- 数据库优化技巧之in和not in
- 求1的数目
- 最多n级,每级最多x个文件/目录,id是y,路径是什么实现方法---初步校验是正确的?!
- 2014 Machine Learning Summer School
- 结构的浅拷贝验证
- jQuery:如何给动态生成的元素绑定事件?
- POJ 1006——Biorhythms
- Windows 进程通信的几种方式
- 【原创】车载实时路况信息接收终端移植于Smart210开发板---步骤3之Ubuntu12.04的QT安装和配置
- 【dataStructure】 Arrays and Java Source Review