题目描述:

http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1009

给定一个十进制正整数N,写下从1开始,到N的所有正数,计算出其中出现所有1的个数。

例如: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.acmerblog.com/count-ones-6202.html
 1位数的情况:大于等于1的时候,有1个,小于1就没有。 2位数的情况:N=13,个位数出现的1的次数为2,分别为1和11,十位数出现1的次数为4,分别为10,11,12,13,所以f(N) = 2+4。N=23,个位数出现的1的次数为3,分别为1,11,21,十位数出现1的次数为10,分别为10~19,f(N)=3+10。由此我们发现,个位数出现1的次数不仅和个位数有关,和十位数也有关,如果个位数大于等于1,则个位数出现1的次数为十位数的数字加1;如果个位数为0,个位数出现1的次数等于十位数数字。而十位数上出现1的次数也不仅和十位数相关,也和个位数相关:如果十位数字等于1,则十位数上出现1的次数为个位数的数字加1,假如十位数大于1,则十位数上出现1的次数为10。 3位数的情况:N=123个位出现1的个数为13:1,11,21,…,91,101,111,121十位出现1的个数为20:10~19,110~119百位出现1的个数为24:100~123 我们可以继续分析4位数,5位数,推导出下面一般情况: 假设N,我们要计算百位上出现1的次数,将由三部分决定:百位上的数字,百位以上的数字,百位一下的数字。如果百位上的数字为0,则百位上出现1的次数仅由更高位决定,比如12013,百位出现1的情况为100~199,1100~1199,2100~2199,…,11100~11199,共1200个。等于更高位数字乘以当前位数,即12 * 100。如果百位上的数字大于1,则百位上出现1的次数仅由更高位决定,比如12213,百位出现1的情况为100~199,1100~1199,2100~2199,…,11100~11199,12100~12199共1300个。等于更高位数字加1乘以当前位数,即(12 + 1)*100。 如果百位上的数字为1,则百位上出现1的次数不仅受更高位影响,还受低位影响。例如12113,受高位影响出现1的情况:100~199,1100~1199,2100~2199,…,11100~11199,共1200个,但它还受低位影响,出现1的情况是12100~12113,共114个,等于低位数字113+1。

AC代码:(应该是抄袭别人的代码)
/***@xiaoran*参考资料,比较懒直接复制粘贴了*http://www.acmerblog.com/count-ones-6202.html*/
#include<iostream>
#include<cstdio>
#include<map>
#include<cstring>
#include<string>
#include<algorithm>
#include<queue>
#include<vector>
#include<stack>
#include<cstdlib>
#include<cctype>
#include<cmath>
#define LL long long
using namespace std;
int CountOne(int n) {int cnt = 0;int i = 1;int current = 0, after = 0, before = 0;while ((n / i) != 0) {current = (n / i) % 10;before = n / (i * 10);after = n - (n / i) * i;if (current > 1)cnt = cnt + (before + 1) * i;else if (current == 0)cnt = cnt + before * i;else if (current == 1)cnt = cnt + before * i + after + 1;i = i * 10;}return cnt;
}
int main()
{int n;while(cin>>n){int res=CountOne(n);cout<<res<<endl;}return 0;
}
												

51nod 1009 数字1的数量(数学)相关推荐

  1. 51nod 1009 数字1的数量

    1009 数字1的数量 给定一个十进制正整数N,写下从1开始,到N的所有正数,计算出其中出现所有1的个数. 例如:n = 12,包含了5个1.1,10,12共包含3个1,11包含2个1,总共5个1. ...

  2. 51Nod 1009 数字1的数量 数位dp

    51Nod 1009 传送门 模板orz 好难记的感觉-- #include<iostream> #include<algorithm> #include<string& ...

  3. 51Nod-1009 数字1的数量【数位DP+记忆化搜索】

    1009 数字1的数量  给定一个十进制正整数N,写下从1开始,到N的所有正数,计算出其中出现所有1的个数. 例如:n = 12,包含了5个1.1,10,12共包含3个1,11包含2个1,总共5个1. ...

  4. 51nod1009 数字1的数量

    1009 数字1的数量 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 

  5. NYOJ 648 数字1的数量

    数字1的数量 时间限制:1000 ms  |  内存限制:65535 KB 难度:1 描述 给定一个十进制正整数N,写下从1开始,到N的所有正数,计算出其中出现所有1的个数. 例如:n = 12,包含 ...

  6. 51Nod 1003 阶乘后面0的数量(数学,思维题)

    1003 阶乘后面0的数量 基准时间限制:1 秒 空间限制:131072 KB 分值: 5         难度:1级算法题 n的阶乘后面有多少个0? 6的阶乘 = 1*2*3*4*5*6 = 720 ...

  7. HTML认识数字游戏,课堂趣味数学游戏:游园活动 ——认识8和9

    阿尔法趣味数学网今天给同学们带来的课堂趣味数学游戏是:游园活动 --认识8和9.本游戏前提是认识1~7各数. 每天10分钟头脑大风暴,开发智力,培养探索能力,让你成为学习小天才. 游戏目的: 使学生能 ...

  8. python内置的数学函数_Python数字和内置数学函数

    python内置的数学函数 In this section, we will be learning about Numbers and various Math functions availabl ...

  9. 相关与卷积(数字信号处理)的数学原理及 Python 实现

    数学原理 在数字信号处理中,相关(correlation)可以分为互相关(cross correlation)和自相关(auto-correlation). 互相关是两个数字序列之间的运算:自相关是单 ...

最新文章

  1. 著名ERP厂商的SSO单点登录解决方案介绍一
  2. C# 接口持有结构体会导致装箱问题
  3. 总结面试时没有回答上的内存对齐问题
  4. 北交大计算机学院复试经验,2014考研复试:过来人考研复试经验谈-北交大计算机系...
  5. 25款.NET开发工具
  6. 小米电视3s测试软件,小米盒子3s开箱评测 三大装机必备软件可看凤凰卫视
  7. 机器学习--文本分析(jieba)
  8. xtwpro2编程器_zadig v2.4编程软件下载|XTW100编程器软件(附USB驱动) - 驱动无忧
  9. JavaWeb学习DAY2—Java web的创建
  10. numpy_linspace函数
  11. win10更换自己喜欢的鼠标样式,马里奥、wow、lol都可以哦
  12. 如何获取qq空间图片的url
  13. 工作随记3:一次交换机环路故障
  14. Thinkpad T480 新机分区
  15. 美国互联网影视业的盈利模式
  16. 汽车自适应巡航控制策略【CarSim/Simulink 仿真】
  17. 极限发问,挑战文心一言底线
  18. 计算机专业毕设都需要哪些准备,计算机专业本科毕设指南.ppt
  19. honor 9x android 10,【荣耀9X升级EMUI10指南】终于等到你,9XPro+EMUI10再战三年!
  20. 张近东现身国米看台 苏宁入资国米目标不只20%股份?

热门文章

  1. 学会如何学习,是一项终极生存技能
  2. 购买抖币显示苹果服务器异常,抖音刷礼物为什么显示当前设备不支持苹果应用内支付?...
  3. 后台自动定时切换壁纸工具
  4. 亚马逊新专利曝光,让机器人学会自己开锁并将包裹送入你的家中
  5. 微软向公众开放与新冠病毒相关的黑客攻击活动的威胁数据
  6. 华为机试题:【中级】报文转换
  7. java基于springboot的高校学报论文在线投稿系统
  8. 初学者第一个JavaWeb项目实战【附源码】
  9. Deep Learning and the Information Bottleneck Principle 深度学习与信息瓶颈原理
  10. Proteus 网络名的添加