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