java实现找一个数范围内所有的一

一、题目内容

给定一个十进制的正整数,写下从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

java实现找一个数范围内所有的一的相关文章

bestcoder#43 1002 在数组中找两个数的和取模的最大值 二分

bestcoder#43 1002 在数组中找两个数的和取模的最大值  二分 pog loves szh II Accepts: 97 Submissions: 834 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Problem Description Pog and Szh are playing games. There is a sequence with n number

在已排序好的数组找两个数a加b等于给定的N

public class 在已排序好的数组找两个数a加b等于给定的N { public static void main(String[] args) { /** * 初始化参数 Result为结果值 * num 是测试数组 * start 开始游标, end 结束游标 */ int Result = 15; int[] num = {1,2,4,7,11,15}; int start = 0, end = num.length-1; //从数组的两端开始扫,若两数之和小于目标,则头往后进一位,

eclipse中web项目部署以后jsp的java文件找不到问题(Tomcat配置serverlocations)

我的开发环境:eclipse kepler (4.3)+tomcat7.0.42. 在我想看eclipse中web项目jsp文件被tomcat转换成java以后的java源文件的位置,发现正常情况下的webapps以下,没有看到我部署的项目 同一时候,work文件夹(jsp的工作文件夹)以下也没有生成相关的jsp的class文件和java源文件.可是我想看源代码啊.找了一堆关于jsp的源代码位置的文章,都说是在work以下能够找到.后来在不断的尝试下,我搜索了keyword server loc

java编写输入一个数判断是否是回文数,所谓回文数比如121,1221,6778776

package com.hao947; import java.util.Scanner; public class demo5 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int x = 0; x = scanner.nextInt(); System.out.println("请输入一个4-8位的数"); int dig[] = new int[10]; i

在数组中找几个数的和等于某个数[LeetCode]

首先明确一点,这个方面的问题设计到的知识点是数组的查找的问题.对于类似的这样的查找操作的具体办法就是三种解决方法: 1.暴力算法,多个for循环,很高的时间复杂度 2.先排序,然后左右夹逼,但是这样会破坏原始数组的下表 3.利用Hash表,直接定位元素,很少的时间复杂度 TwoSums 先来看看最简单的,在一个数组中找两个数的和等于某个数. 这个题目最简简单的方法就是暴力法,所需的时间复杂度是O(n2),但是这是不允许的,所以一个O(n)的方法就是利用Hash表存储数据,这样能够把查找的时间降低

编译和运行java文件 找不到或无法加载主类

这边提供一个关于程序中含有package关键字,使用"终端"运行程序时出现"找不到或无法加载主类",而使用Eclipse软件可以正常运行程序的可能解决办法. 例如程序名为HelloWorldTest.java,程序中含有package helloWorld语句,而该包位于javatest目录下,即javatest/helloWorld/HelloWorldTest.java. 应该在java文件所在的目录运行javac指令,即在helloWorld目录中运行java

记一次解决cmd中执行java提示"找不到或无法加载主类"的问题

今天遇到一个问题:在cmd命令行中,用javac编译java文件可以成功,但是用java执行却提示"找不到或无法加载主类".现将该问题的原因以及解决办法记录一下. 先理解一下系统变量path和classpath的作用. path:可执行命令的搜索路径,在该路径下搜索可以运行的程序或批处理文件. 命令行中输入一个命令,则会在path配置的目录中查找该命令,如果存在则调用该程序运行,如果不存在则提示" 'XXX' 不是内部或外部命令,也不是可运行的程序或批处理文件."

Java实现找出数组中重复次数最多的元素以及个数

/**数组中元素重复最多的数 * @param array * @author shaobn * @param array */ public static void getMethod_4(int[] array){ Map<Integer, Integer> map = new HashMap<>(); int count = 0; int count_2 = 0; int temp = 0; for(int i=0;i<array.length;i=i+count){

找两个数和为某个数

问题.输入一个递增排序数组和一个数字s,在数组中查找两个数,使得它们的和正好是s,如果有多对数字的和等于s,输出任意一对即可. 显然,很快能想到的是使用蛮力法(O(n2)),先固定一个数字,再判断剩下的n-1个数字与它的和是否等于s.这种效率显然有点低,我们可以使用下面比较快的方式,时间复杂度O(n). 思路:我们通过两个记录数组的开始位置和结束位置,从数组的尾部开始,求两个数字的和, 如果两个数的和大于我们需要求的数s,则后面的记录前移一位(因为是排好序的,前移一位,相当于数值减少),再进行判