/** * 题目名称:数1的个数 <p> * 题目来源:http://noi.openjudge.cn/ch0105/40/ <p> * 程序功能:输出所有小于等于指定正整数的正整数范围内数字1出现的次数 * * @author 潘磊,just_panlei@just.edu.cn * @version 1.0 */importjava.util.Scanner;publicclassMain{/** * 返回指定整数包含指定数字的个数。 * * @param num 指定整数。 * @param digit 指定数字。 * @return num包含digit的个数。 */publicintcountDigit(intnum,intdigit){intans=0;// num包含digit的个数/* 在num尚未变为0时 */while(num!=0){if(num%10==digit){// 如果当前num的个位数为digitans++;// 令计数器加1}num/=10;// 移除当前num的个位数}returnans;}/** * 返回指定区间内所有整数包含指定数字的个数。 * * @param L 指定区间的起始边界。 * @param R 指定区间的终止边界。 * @param digit 指定数字。 * @return [L,R]区间内所有整数包含digit的个数。 */publicintnumberOfDigit(intL,intR,intdigit){intans=0;// [L,R]区间内所有整数包含digit的个数/* 从整数L依次遍历到整数R */for(inti=L;i<=R;i++){ans+=countDigit(i,digit);// 累加当前整数包含digit的个数}returnans;}publicstaticvoidmain(String[]args){Maincall=newMain();Scannerinput=newScanner(System.in);intn=input.nextInt();System.out.print(call.numberOfDigit(1,n,1));}}40:数1的个数
RELATED READING
延伸阅读
更多一线实战笔记与深度复盘,助您持续精进