计算机算法设计与分析课后习题(算法实现题1)
1-1 统计数字问题
- 问题描述:
一本书的页码从自然数1开始顺序编码直到自然数 n 。书的页码按照通常习惯的编排,每个页码够不含多余的前导数字 0 。 列如,第6页用数字 6 表示而不是06或006等。 数字计数问题要求对给定的总页码 n ,计算书的全部页码分别用到多少次数字0,1,2,…,9。 - 算法设计:
给定表示书的总页码的十进制整数 n(1 <= n <= 10^9),计算书的全部页码中分别用到多少次数字0,1,2,…,9。
java代码实现
import java.util.Scanner;
/**
* \* User: 小场面
* \* Date: 20/9/22
* \* Time: 21:50
*/
public class Realize1_1 {
public static int zero=0,one=0,two=0,three=0,tour=0,five=0,six=0,seven=0,eight=0,nine=0;
public static void main(String[] args) {
// % 取余, / 取整
System.out.print("请输入一个整数页:");
// 创建输入对象
Scanner input = new Scanner(System.in);
// 获取输入的字符串
String text = input.next();
// 把字符串转换成整型
int num = Integer.valueOf(text);
int zheng = num;
int yu = num;
while (num>0){
// 获取输入字符串的长度
int len = String.valueOf(num).length()-1;
while(len>=0) {
zheng = (int) (yu/(Math.pow(10, len))); // 取整,要取的数
yu = (int) (yu%(Math.pow(10, len))); // 取余,用作下次计算
addNum(zheng); // 调用计数方法
--len;
}
yu=--num;
}
System.out.println("0的个数为:"+zero+"个");
System.out.println("1的个数为:"+one+"个");
System.out.println("2的个数为:"+two+"个");
System.out.println("3的个数为:"+three+"个");
System.out.println("4的个数为:"+tour+"个");
System.out.println("5的个数为:"+five+"个");
System.out.println("6的个数为:"+six+"个");
System.out.println("7的个数为:"+seven+"个");
System.out.println("8的个数为:"+eight+"个");
System.out.println("9的个数为:"+nine+"个");
}
// 数字0-9的累加方法
public static void addNum(int zheng) {
switch (zheng) {
case 1:
one++;
break;
case 2:
two++;
break;
case 3:
three++;
break;
case 4:
tour++;
break;
case 5:
five++;
break;
case 6:
six++;
break;
case 7:
seven++;
break;
case 8:
eight++;
break;
case 9:
nine++;
break;
default:
zero++;
break;
}
}
}