一道简单的算法练习题试水下

t算法设计与分析题第一题-统计数字问题不知道 是否正确,求验证!

一本书的页码从自然数1开始顺序编码到自然数n.书的页码按照通常习惯编排,每个页码都不含多余的前导数字0.例如第六页用6表示,而不是06类等,数字统计问题要求对给定书的总页码n,计算机出书全部页码分别用到多少次数字0,1,2………………9

public class Nubercount {//就这一看似简单的问题,却费了我这么长的时间,
	int a[]=new int [10];
	int tempcount=1;//位权
	int cc=0;
	
public void NuberCou(int n){
	int m=n;
   int j=0,temp;
	int k=10;

	String str=String.valueOf(n);
	int total=str.length();
	int i=total-1;
	int t=total;
	int[] b=new int[t];
	int a[]=new int[10];
	for(;m>0;i--){
		b[i]=m%10;
		m/=10;
	}
	m=n;
	for(int c:b)
		System.out.print(c+" ");
	System.out.println();

	while(t!=0){
		int tt=t-1;
		
	  for(i=(t<total && t>1?0:1);i<b[j];i++)	//统计最高t位
	     a[i]+=Math.pow(10, t-1);
	  temp=b[j];
		
	  while(tt-->0){
		  temp=temp*(int)Math.pow(10, tt);
	 for(i=0;i<10 ;i++)//统计t-1到末位的数
		
	 a[i]+=temp;
	 
	 
	  }
	  System.out.println(m%(int)Math.pow(10, t-1));
	 a[b[j]]+=m%Math.pow(10, t-1)+t>1?1:0;//统计高位最后一个数
	 if(m%10!=0 && t==1)  a[b[j]]+=1;
	j++;
	t--;
	}
	for(int s:a)
		System.out.print(s+" ");
}
@Test
	public void test(){
		NuberCou(998);
	}

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值