1009 数字1的数量
2015-07-20 21:44
239 查看
给定一个十进制正整数N,写下从1开始,到N的所有正数,计算出其中出现所有1的个数。
例如:n = 12,包含了5个1。1,10,12共包含3个1,11包含2个1,总共5个1。
Input
Output
Input示例
Output示例
例如:n = 12,包含了5个1。1,10,12共包含3个1,11包含2个1,总共5个1。
Input
输入N(1 <= N <= 10^9)
Output
输出包含1的个数
Input示例
12
Output示例
5
这个用普通的暴力是肯定会超时,所以要找规律,规律在这个博客上http://www.cnblogs.com/jy02414216/archive/2011/03/09/1977724.html
那里介绍了三种方法,而我用的是第二种方法
代码如下
#include<stdio.h> #include<string.h> #include<iostream> #include<algorithm> #include<math.h> using namespace std; __int64 get_ans(int n) { __int64 count=0; if(n==0) { count=0; } else if(n>1&&n<10) { count=1; } else { int high=n; int bit=0; while(high>=10) { high=high/10; bit++; } int weight=pow(10,bit); if(high==1) { count+=get_ans(weight-1)+get_ans(n-weight)+n-weight+1; } else { count+=high*(get_ans(weight-1))+get_ans(n-high*weight)+weight; } } return count; } int main() { int n; scanf("%d",&n); printf("%lld",get_ans(n)); return 0; }
相关文章推荐
- 网络路由技术及运用2
- 获取免费的Camtasia Studio 2使用授权
- C#中的递归APS和CPS模式详解
- WinForm实现按名称递归查找控件的方法
- 选择模式 - XSL教程 - 2
- C#中的尾递归与Continuation详解
- C#递归实现显示文件夹及所有文件并计算其大小的方法
- php递归创建目录的方法
- Javascript递归打印Document层次关系实例分析
- JS Common 2 之比较常用到的函数第1/3页
- oracle 使用递归的性能提示测试对比
- 使用curl递归下载软件脚本分享
- Perl脚本实现递归遍历目录下的文件
- JavaScript的递归之递归与循环示例介绍
- C# 递归查找树状目录实现方法
- 全排列算法的非递归实现与递归实现的方法(C++)
- php递归列出所有文件和目录的代码
- java递归菜单树转换成pojo对象
- 一个JavaScript递归实现反转数组字符串的实例
- Java中的递归详解(用递归实现99乘法表来讲解)