zoukankan      html  css  js  c++  java
  • 【算法分析】统计1到N中一共用到多少个0,1,2,3......

    统计数字问题:

    (1)、问题描述

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

    (2)、算法设计

    给定表示书的总页码的10 进制整数n (1≤n≤10) 。编程计算书的全部页码中分别用到多少次数字0,1,2,…,9。

    java实现

    public class Lab101 {
    	public static void main(String[] args) {
    		Lab101 lab = new Lab101();
    		lab.func(9);
    		for (int i = 0; i < 10; i++) 
    			System.out.println(i + "统计:" + lab.stat[i]);
    	}
    	int stat[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
    	public void func(int num) {
    		int tmp = num;
    		while (tmp >= 10) {
    			stat[tmp % 10]++;
    			tmp /= 10;
    		}
    		stat[tmp]++;
    		if (num > 0)
    		func(--num);
    	}
    }
    

      上面的方法因为递归比较多,java虚拟机的栈数量有限制,会出现java.lang.StackOverflowError错误,所以就改用循环方法

    public class Lab101 {
    	public static void main(String[] args) {
    		int stat[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
    		for (int i = 1000; i < 100000; i++) {
    			int tmp = i;
    			while (tmp >= 10) {
    				stat[tmp % 10]++;
    				tmp /= 10;
    			}
    			stat[tmp]++;
    		}
    		for (int j = 0; j < 10; j++) 
    			System.out.println(j + "统计:" + stat[j]);
    	}
    }
    

      

      若有更好的算法,请指点。

  • 相关阅读:
    oracle对象之序列
    PLSql工具介绍
    oracle对象之同义词
    oracle对象之视图
    缓存问题汇总
    消息队列问题汇总
    算法-排序算法-1
    redis-主从数据一致
    数据结构与算法-完全二叉树/满二叉树
    写缓冲器与无效化队列
  • 原文地址:https://www.cnblogs.com/taoweiji/p/2941571.html
Copyright © 2011-2022 走看看