页码0~N ,其中0,1....9都出现了几次

/*
这道题目可以暴力解答:对1~n的每个数进行从低位到高位分析
一旦这个数字num出现,a[num]++即可
第二种方法:
由0,1,...9组成的所有n位数,从n个0到n个9共10^n个数,0,1,...9
出现的次数一样设为a(n),那么易得:
a(n)=10a(n-1)+10^(n-1) (n>1) a(n)=1(n==1)化简可得到
a(n)=n*10^(n-1).
那么这道题目从高位到低位依次处理,最后减去多余的前导零即可
*/
#include <bits/stdc++.h>
using namespace std;
int n,a[15];
void solve(int  n){
    int l =log10(n)+1;//n的位数
    int p =n/(int)round(pow(10.0,l-1));//当前的这位数字
    //0~9都会出现p*(l-1)*(int)round(pow(10.0,l-2))次
    for(int i =0;i<10;i++) a[i]+=p*(l-1)*(int)round(pow(10.0,l-2));
    //0~p-1都会出现(int)round(pow(10.0,l-1))次
    for(int i=0;i<p;i++)   a[i]+=(int)round(pow(10.0,l-1));
    int temp =(int)round(pow(10.0,l-1));
    temp=n%temp;
    if(temp==0) {//递归可以结束了
    //如12500 p再出现一次,0再出现l-1次
        a[p]++;
        a[0]+=l-1;
        return ;
    }
    int lt=log10(temp)+1;
    if(lt!=l-1)//如20036
    {
       a[0]+=(l-1-lt)*(1+temp);
    }
    a[p]+=1+temp;
    return solve(temp);
}
int main(){

    cin>>n;
    solve(n);
    int len = log10(n)+1;
    //减去前导零
    for(int i =0;i<len;i++) a[0]-=(int)round(pow(10.0,i));
    //如21536
    //00000~09999  0出现了10000次
    //0000~0999    0出现了1000次
    //000~099      0出现了100次
    //00~09        0出现了10次
    //再加上一个0
    for(int i =0;i<10;i++) printf("%d %d\n",i,a[i]);
    return  0;
}

原文地址:https://www.cnblogs.com/tingtin/p/11747849.html

时间: 2024-08-14 18:50:49

页码0~N ,其中0,1....9都出现了几次的相关文章

Ibatis 3.0 之前使用的都是2.0 3.0与2.0的内容有很大的不同

以前用过ibatis2,但是听说ibatis3有较大的性能提升,而且设计也更合理,他不兼容ibatis2.尽管ibatis3还是beta10的状态,但还是打算直接使用ibatis3.0, ibatis3.0应该更简单高效.最近还自己写了个ibatis3.0与spring集成的bean,运行还正常,还自鸣得意了一番,但是当独立使用ibatis时,在事务管理这个方面还是出现不少问题,所以还是打算再认真研究一番ibatis3.0 1.SqlSessionFactory 每个ibatis应用都应该只有一

大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。 n&lt;=39

斐波那契数列的概念(下面的知识点来自百度百科) 斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”, 指的是这样一个数列:1.1.2.3.5.8.13.21.34.……在数学上,斐波纳契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N*) 在现代物理.准晶体结构.化学等领域,斐波纳契数列都有直接的

NVIDIA DIGITS 学习笔记(NVIDIA DIGITS-2.0 + Ubuntu 14.04 + CUDA 7.0 + cuDNN 7.0 + Caffe 0.13.0)

转自:http://blog.csdn.net/enjoyyl/article/details/47397505?from=timeline&isappinstalled=0#10006-weixin-1-52626-6b3bffd01fdde4900130bc5a2751b6d1 NVIDIA DIGITS-2.0 + Ubuntu 14.04 + CUDA 7.0 + cuDNN 7.0 + Caffe 0.13.0环境配置 引言 DIGITS简介 DIGITS特性 资源信息 说明 DIGI

大话Hadoop1.0、Hadoop2.0与Yarn平台

2016年12月14日21:37:29 Author:张明阳 博文链接:http://blog.csdn.net/a2011480169/article/details/53647012 近来这几天一直在忙于Hbase的实验,也没有太静下心来沉淀自己,今天打算写一篇关于Hadoop1.0.Hadoop2.0与Yarn的博文,从整体上把握三者之间的联系,博客内容如有问题,欢迎留言指正!OK,进入本文正题-- 在开始接触Hadoop的时候,也许大家对于Hadoop是下面的一个概念:Hadoop由两部

iOS10.0 &amp; Swift 3.0 对于升级项目的建议

iOS & Swift新旧版本更替, 在Apple WWDC大会开始之际, 也迎来了iOS 10.0, Swift 3.0 测试版, 到目前为止, 已经是测试版2.0, 每次更新都带来了新的语法变化, Swift更加简洁, 但是Xcode 越发不给力, 输出变本加厉, NSLog 一如既往的不好使, 但是,好消息是, 无论语法怎么改变, 在已有项目的基础上, Xcode更新到8.0 测试版 2.0, 您只需按照系统提示的红空心原点提示, 一个一个的替换, 就可以完美的过度到iOS 10.0,  

【Web】Web1.0和Web2.0

具体请参照百度百科: web1.0时代是一个群雄并起,逐鹿网络的时代,虽然各个网站采用的手段和方法不同,但第一代互联网有诸多共同的特征,表现在技术创新主导模式.基于点击流量的盈利共通点.门户合流.明晰的主营兼营产业结构.动态网站.在WEB1.0上做出巨大贡献的公司有Netscape,Yahoo和Google. Netscape研发出第一个大规模商用的浏览器,Yahoo的杨致远提出了互联网黄页, 而Google后来居上,推出了大受欢迎的搜索服务. 中文名 web1.0 特    点 群雄并起,逐鹿

127.0.0.1、0.0.0.0和本机IP地址的区别和使用

表面上的区别如下: 0.0.0.0 不能ping通,代表本机所有的IP地址:包括多个网卡.    监听127.0.0.1,创建Socket,那么用本机地址建立tcp连接不成功,反过来也是如此:    而监听0.0.0.0创建Socket,那么无论使用127.0.0.1或本机ip都可以建立tcp连接.    同样本机如果有多个网卡,那么绑定与监听不同的IP地址,显然也不能建立tcp连接.    0.0.0.0建立tcp连接的时候也可以通过绑定IP_ADDR_ANY来实现. 事实上处理的区别,如下图

hadoop-2.0.0-cdh4.6.0 安装

1.创建hadoop用户[所有操作都是root,在所有master和slaver上]1).创建hadoop用户:adduser hadoop2).更换密码:passwd hadoop====================================================================================2.安装jdk[所有操作都是root,在所有master和slaver上]将jdk.tar.gz解压到/et/local/:tar –zxvf jdk

.Net的StringBuilder实现在4.0和2.0区别

.Net 4.0重构了StringBuilder的实现,采用了新的数据存储方式,不仅在效率上有大的提高,并且彻底避免了中间处理过程出现临时String对象进入LOH大对象堆的情况.本文对此进行分析. 回顾.Net 2.0的StringBuilder实现 Reflector查看StringBuilder的实现: 其内部数据存储结构为string(对应成员变量m_StringValue).StringBuilder的构造函数可以依据指定的字符串和容量来初始化,默认为空串(string.Empty),

【JDBC发展史】从JDBC1.0到JDBC4.0

JDBC是一种可用于执行SQL语句的JavaAPI(ApplicationProgrammingInterface应用程序设计接口).它由一些Java语言编写的类和界面组成.JDBC为数据库应用开发人员.数据库前台工具开发人员提供了一种标准的应用程序设计接口,使开发人员可以用纯Java语言编写完整的数据库应用程序. 本文介绍了JDBC1.0--JDBC4.0的发展史,并带有少量的编程. 一.ODBC到JDBC的发展历程 说到JDBC,很容易让人联想到另一个十分熟悉的字眼"ODBC".它