1 统计数字问题
1.1 算法设计思想
设书的页数为 n 由 0,1,2...9 组成的所有 n 位数。从 n 个 0 到 n 个 9 共有 10^n 个 n
位数。在这 10^n 个 n 位数中,0,1,2.....9 第个数字使用次数相同。f(n)满足如下递推式:
f(n) = n*10^(n-1)。通过这个方法算出 0-9 数字出现的次数,最后减去 0 的个数。
1.2 程序源码
import java.util.Scanner;
public class Count {
public static void main(String[] args) {
int[] count=new int[10];
//建立一个数组,表示数字count[i]出现的次数
int[]
f19={0,1,19,280,3700,46000,550000,6400000,73000000,820000000};
//f19[i]表示i位数里面,没有前导0时,数码i出现的次数,例如10-99
int[] f0={0, 1, 9, 180, 2700, 36000, 450000, 5400000,
63000000, 720000000};
//f0[i]表示i位数里面,没有前导0时,数码0出现的次数
int[]
Next={0,1,20,300,4000,50000,600000,7000000,80000000,900000000};
//Next[i]表示为了计算i+1位数的各个数码出现的次数,需要知道i位数考虑前导
0时,各个数码出现的次数,例如00-99
int[]
Num={1,10,100,1000,10000,100000,1000000,10000000,100000000,1000000000
};
//Num[i]表示i位数里一共有多少个数,例如2位数共100个,00-99
int i,j,k,sum=0;
int page,temp;
System.out.println("实验一 算法的分析基础");
System.out.println("题目:统计数字问题");
Scanner reader=new Scanner(System.in);
System.out.println("输入:");
page=reader.nextInt();
long startTime=System.nanoTime();//获取开始时间
while(page!=0){
temp=page;
for(i=0;i<10;++i)