40:数1的个数 /** * 题目名称数1的个数 p * 题目来源http://noi.openjudge.cn/ch0105/40/ p * 程序功能输出所有小于等于指定正整数的正整数范围内数字1出现的次数 * * author 潘磊just_panleijust.edu.cn * version 1.0 */importjava.util.Scanner;publicclassMain{/** * 返回指定整数包含指定数字的个数。 * * param num 指定整数。 * param digit 指定数字。 * return num包含digit的个数。 */publicintcountDigit(intnum,intdigit){intans0;// num包含digit的个数/* 在num尚未变为0时 */while(num!0){if(num%10digit){// 如果当前num的个位数为digitans;// 令计数器加1}num/10;// 移除当前num的个位数}returnans;}/** * 返回指定区间内所有整数包含指定数字的个数。 * * param L 指定区间的起始边界。 * param R 指定区间的终止边界。 * param digit 指定数字。 * return [L,R]区间内所有整数包含digit的个数。 */publicintnumberOfDigit(intL,intR,intdigit){intans0;// [L,R]区间内所有整数包含digit的个数/* 从整数L依次遍历到整数R */for(intiL;iR;i){anscountDigit(i,digit);// 累加当前整数包含digit的个数}returnans;}publicstaticvoidmain(String[]args){MaincallnewMain();ScannerinputnewScanner(System.in);intninput.nextInt();System.out.print(call.numberOfDigit(1,n,1));}}