• 统计数字


    Description一本书的页码是从自然数1开始顺序编码直到自然数n.书的页码按照通常习惯编排,每个页码都不含多余的前导数字0。例如,第6页用数字6表示,而不是06或006等。数字记数问题要求给定书的总页码n,计算出书的全部页码中分别用到多少次数字0,1…..9。
    Input输入只有一个数字书的全部页码n(这里1<=n<1000000000)
    Output从0到9依次输出这几个数字在页码中出现的次数,每个数字一行。

    Sample Input

    999

    Sample Output

    0 189
    1 300
    2 300
    3 300
    4 300
    5 300
    6 300
    7 300
    8 300
    9 300
    
    Hint
    呵呵,n的值给的够大,一部天书啊!



    #include<stdio.h>
    long a[10]={0};
    void deal(long n)
    {
    a[n%10]++;
    n=n/10;
    while(n)
    {
    a[n%10]++;
    n=n/10;
    }
    }
    long pow1(int n)
    {
    long k=1;
    while(n)
    {
    k=k*10;
    n--;
    }
    return k;
    }
    int sort(int n)
    {
    int t=0;
    long m=1;
    while(n/m)
    {
    t++;
    m=m*10;
    }
    return t;
    }
    void main()
    {
    long n,i,j,k=11;
    long b[9][10];
    scanf("%d",&n);
    b[0][0]=0,b[1][0]=9;
    for(i=2;i<9;i++)
    {
    b[i][0]=i*pow1(i)-k;
    k=k*10+1;
    }
    for(i=0;i<9;i++)
    b[i][1]=(i+1)*pow1(i);
    for(i=0;i<9;i++)
    for(j=2;j<10;j++)
    b[i][j]=b[i][1];
    k=0;
    if((n+1)%10==0)
    {
    for(i=0;i<10;i++)
    printf("%d %d ",i,b[sort(n)-1][i]);
    }
    else if(n<9)
    {
    printf("0 0 ");
    for(i=1;i<10;i++)
    if(i<n)printf("%d 1 ",i);
    else printf("%d 0 ",i);
    }
    else
    {
    long x,y,zx,wy;
    k=sort(n);
    x=pow1(k-1)-1;
    y=pow1(k)-1;
    zx=n-x;
    wy=y-n;
    if(zx>wy)
    {
    for(i=n+1;i<=y;i++)
    deal(i);
    for(i=0;i<10;i++)
    printf("%d %d ",i,b[k-1][i]-a[i]);
    }
    else
    {
    for(i=x+1;i<=n;i++)
    deal(i);
    for(i=0;i<10;i++)
    printf("%d %d ",i,b[k-2][i]+a[i]);
    }
    }
    }

  • 相关阅读:
    Linux sort命令使用方法
    Linux awk命令使用方法
    Linux sed命令使用方法
    Python调用外部系统命令
    [ Python入门教程 ] Python正则表达式与re模块介绍
    [ Python入门教程 ] python异常处理方法
    Python操作远程服务器paramiko模块介绍
    Hibernate的应用及注解开发
    JQuery Validate插件与实现
    Struts2的核心——拦截器
  • 原文地址:https://www.cnblogs.com/zhang20115330/p/3151645.html
Copyright © 2020-2023  润新知