一、题目内容
给定一个十进制的正整数,写下从1开始,到N的所有整数,然后数一下其中出现“1”的个数。
要求:
写一个函数 f(N) ,返回1 到 N 之间出现的 “1”的个数。例如 f(12) = 5。
在32位整数范围内,满足条件的“f(N) =N”的最大的N是多少。
二、设计思路
按每个位来计算1的数量,每相邻的三位数有联系,abc,就先算c,再加上b,最后再加上a
三、实验代码
//FindOne.java package com.minirisoft; import java.util.Scanner; public class FindOne { public static int Sum( int n ) { int Count = 0; int Factor = 1; int Lower = 0; int Curr = 0; int Higher = 0; while( n / Factor != 0 ) { Lower = n - ( n / Factor ) * Factor; Curr = (n / Factor ) % 10; Higher = n / ( Factor *10 ); switch( Curr ) { case 0: Count += Higher * Factor; break; case 1: Count += Higher * Factor + Lower + 1; break; default: Count += ( Higher + 1 ) * Factor; break; } Factor *= 10; } return Count; } public static void main(String[] args) { Scanner input=new Scanner(System.in); System.out.print("请输入一个正整数:"); int n=input.nextInt(); System.out.print("1到"+n+"的1个数为:"+Sum(n)+"个"); } }
四、实验截图
五、心得体会
一般设计程序,要找到题目的规律,根据规律在做出程序
时间: 2024-10-06 03:10:22