标签:
一、题目:
import java.util.*; public class main { public static void main(String[] args) { // TODO Auto-generated method stub int num; Scanner S=new Scanner(System.in); System.out.print("请输入数字:"); num=S.nextInt(); System.out.print(num+"中出现数字1的个数为:"); System.out.println(Count(num)); for(int i=32767;i>0;i++) { if(Count(i)==i) { System.out.print("满足条件的“f(N) =N”的最大的N是"+i); break; } } } static int Count(int n) { int count=0; int factor=1; int LowerNum=0; int CurNum=0; int HigherNum=0; while (n/factor!=0) { LowerNum=n-(n/factor)*factor; CurNum=(n/factor)%10; HigherNum=n/(factor*10); switch (CurNum) { case 0: count=count+HigherNum*factor; break; case 1: count=count+HigherNum*factor + LowerNum +1; break; default: count=count+(HigherNum+1)*factor; break; } factor=factor*10; } return count; } }
四、程序运行截图:
五、个人总结:
这次程序自己首先想到的是把1—N的每个数里边的1数一遍。但这不是最有效的办法,自己想的方法又实现不出来,在网上找了好多资料,只有上面的这种方法自己可以理解,因此就抄袭了下来。这个程序是根据如下规律写出来的:
1.一位十进制数:当N>=1时,f(N)=1;当N=0时,f(N)= 0;
给定一个十进制的正整数,写下从1开始,到N的所有整数,然后数一下其中出现“1”的个数。
标签:
原文地址:http://www.cnblogs.com/fengyutongxing/p/4552770.html