Java基础题_2021_12_04
剑指offer
4.数列求和
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.求最小公倍数
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.求平均数
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.判断质数
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和它本身没有其他因数的自然数。