您的位置:首页 > 编程语言 > Go语言

统计数字问题

2007-08-22 20:06 405 查看
一本书的页码从自然数1开始顺序编码直到自然数n.书的页码按照通常的习惯编排,每个页码都不含多YU的前导数字0.例如,第6页用数字6表示,而不是06或006等.数字计数问题要求对给定书的总页码n,计算出书的全部页码中分别用到多少次数字0,1,2...9.
给定表示书的总页码的十进制数n(1<=n<=10^9). 


import java.io.*; 


class Test 




...{ 


    static int c[]=new int[10]; 


    public static void main(String[] args) throws Exception 




    ...{ 


        BufferedReader bf=new BufferedReader(new InputStreamReader(System.in)); 


        String str; 


        str=bf.readLine(); 


        go(str); 


        for(int i=0;i<c.length;i++) 


            System.out.println(i+" "+c[i]); 


    } 


    public static void go(String str) 




    ...{ 


        int cout=-1;


        String s="1";         


        String tmp=""; 


        boolean flag=false; 


        int n,m,r,sum,pre; 


        r=0; 


        pre=0; 


        sum=0;                 


        m=Integer.parseInt(str);        


             


            for(int i=0;i<str.length()-1;i++) 


                s=s+"0";             




            do...{ 


                n=Integer.parseInt(s);             


                r=(m-pre)/n; 




                if(flag)...{tmp=tmp+(new Integer(pre)).toString().charAt(cout);flag=false;}             


                for(int i=0;i<tmp.length();i++) 


                    c[tmp.charAt(i)-48]+=r*n;                 


                for(int i=0;i<r;i++) 


                    c[i]=c[i]+(int)Math.pow(10,s.length()-1);                 


                for(int i=0;i<c.length;i++) 


                    c[i]=c[i]+r*(s.length()-1)*(int)Math.pow(10,s.length()-2);         


                 


                pre=r*n+pre;             




                if(m-pre<n)...{flag=true;s=s.substring(0,s.length()-1);cout++;}                 


            }while(m-pre>10);             


            sum=0; 


            for(int i=0;i<str.length();i++) 


                sum = sum+(int)Math.pow(10,i);         


            c[0]-=sum; 


            for(int i=pre;i<=m;i++) 




            ...{ 


                String st=""+i; 


                for(int j=0;j<st.length();j++) 


                    c[st.charAt(j)-48]++; 


            } 


      } 


}

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息