1009 数字1的数量 分类: 51nod 2015-07-20 21:44 3人阅读 评
2015-12-31 08:40
447 查看
给定一个十进制正整数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; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
相关文章推荐
- 51nod 1091 线段的重叠 分类: 51nod 2015-07-18 21:49 7人阅读
- LoadRunner常用函数
- Request.url用法
- center
- iOS 开发如何获取当前的应用版本号
- relative 和 absolute
- 自定义View的XML报错问题
- 猿题库 iOS 客户端架构设计-唐巧
- window与linux文件传输工具
- 分享一个通过面向对象方式完成的拖拽功能
- 乱码问题
- 局域网网络不通,或者打开访问网络计算机网速变慢,软件打开超卡,设置下ip地址试试
- NSArry 常用方法...enumerateObjectsUsingBlock:
- 集中火力(3)
- ZOJ1655 Transport Goods(Floyd)
- 在 Linux 终端下看《星球大战》
- 学习笔记 ——深度学习和机器视觉
- Qt连接MySQL失败
- LoadRunner脚本分析
- c语言实现hashtable,相似C++的map和iOS的NSDictionary