1009 数字1的数量 分类: 51nod 2015-07-20 21:44 3人阅读 评

来源:互联网 发布:php开发网站兼容问题 编辑:程序博客网 时间:2024/06/11 21:06
给定一个十进制正整数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.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;}          

版权声明:本文为博主原创文章,未经博主允许不得转载。

0 0
原创粉丝点击