Java基础题_2021_12_04

剑指offer

4.数列求和

image-20211204143702214

1.将字符串转换为长整型

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner console = new Scanner(System.in);
        int m = console.nextInt();
        int n = console.nextInt();
        int result = getCM(m, n);
        System.out.println(result);
    }

    public static int getCM(int m, int n){

        //write your code here......


    }
}

2.根据地推公式ai=a(i-1)*10+9

public class Main {
    public static void main(String[] args) {

        //write your code here........
        long num=0;
        long sum=0;
        for(int i=0;i<10;i++){
            num=num*10+9;
            sum=num+sum;
        }
        System.out.println(sum);
    }
}

5.求最小公倍数

image-20211204151003079

package com.wildfire;

import java.util.*;

public class Demo1 {
    public static void main(String[] args) {
        Scanner console = new Scanner(System.in);
        int m = console.nextInt();
        int n = console.nextInt();
        int result = getCM(m, n);
        System.out.println(result);
    }

    public static int getCM(int m, int n){
        //write your code here......
        int num=0;
        if(m>=n){
            if(m%n==0){
                return m;
            }
            num=m;
            do{
                num=num+1;
            }while((num%m==0)||(num%n==0));
            return num;
        }else{
            if(n%m==0){
                return n;
            }
            num=n;
            do{
                num=num+1;
            }while((num%m==0)||(num%n==0));
            return num;
        }

    }
}

​ 反思:这个题不难,但是书写的时候忘记了do-while循环怎么写,耽误了一些时间。

do{
    //循环体
}while(循环条件);

​ do-while循环有几个注意点:1.是先执行一次循环体才开始循环;2.满足循环条件才会循环,而不是满足循环条件跳出循环;3.最后有一个分号

​ 但是,我的做法明显不是最优解,忽略了最小公倍数一定不会超过m*n这个条件,而且使用了太多的循环嵌套。

public static int getCM(int m, int n){
        //求出mn之间的较大者
        int max=Math.max(m,n);
        //求最小公倍数
        for(int i=max;i<=m*n;i++){
        	if(i%m==0&&i%n==0)
       	 	return i;
        }
        	return -1;
}

6.求平均数

image-20211205204435607

public class Demo1 {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);

        //write your code here......
        int sum = 0;
        int sc = 0;
        int i = 0;
        do{
            sc=scan.nextInt();
            if (sc > 0) {
                sum=sum+sc;
                i++;
            }
        }while (sc>0);
        double avg = (double)sum / i;
        System.out.println(String.format("%.2f", avg));
    }
}

​ 这个题有两个注意点:

​ 第一是do-while循环的写法,是满足while中的循环条件才会循环,不满足了才会跳出

​ 第二个就是double avg = (double)sum / i;,必须先将int类型的sum转化成double才不会造成精度损失,否如果不将sum转为double的话,就会将int类型的sum/i转成double,早已损失了精度。

7.判断质数

image-20211205211027279

public class Main {
    public static void main(String[] args) {
        Main main = new Main();
        Scanner scan = new Scanner(System.in);
        int number = scan.nextInt();
        System.out.println(main.isPrimeNumber(number));
    }

    public Boolean isPrimeNumber(int number) {

        if(number==2){
            return true;
        }else{
            for(int i=2;i<number;i++){
                if(number%i==0)
                    return false;
            }
        }
        return true;
    }
}

​ 质数是大于1的自然数中,除了1和它本身没有其他因数的自然数。

posted @ 2021-12-05 21:11  Mr_WildFire  阅读(75)  评论(1编辑  收藏  举报