要求:
给定一个十进制的正整数,写下从1开始,到N的所有整数,然后数一下其中出现“1”的个数。
写一个函数 f(N) ,返回1 到 N 之间出现的 “1”的个数。例如 f(12) = 5。 在32位整数范围内,满足条件的“f(N) =N”的最大的N是多少。
设计思路:
采用最笨的方法,设计函数xx(long m)返回m中1的个数。设计函数Fun(long n)返回从1到n的所有数的1的个数。
源代码:
import java.util.Scanner; public class Main { static long Fun(long n){ long flag = 0; for(long i = 1;i <= n;i++){ flag = flag + xx(i); } return flag; } // 返回m中有多少个1 static long xx(long m){ long t = -1,flag = 0; while(m != 0){ t = m - (m/10)*10; if(t == 1) flag++; m = m / 10; } return flag; } public static void main(String[] args){ System.out.print("输入N:"); Scanner in = new Scanner(System.in); long n = in.nextLong(); long maxLong = 429496729; System.out.print("" + Fun(n) + " "); }