更新时间又太晚了,拖的时间太长了。下次注意,争取每天一更。 今天的主题是算法,以后一个月的时间都是关于算法的了。
问题1:求两个从键盘输入的数的最大公约数和最小公倍数
顺序理解
(1)先求最大公约数 (2)再求最小公倍数最大公约数
辗转相除法是求两个自然数的最大公约数的一种方法,也叫欧几里德算法 代码: while(max%min!=0){ //一个while循环 int temp=max%min; //先拿最大数除以最小数 max=min; //得到余数以后,一直拿被除数和余数相除 min=temp; } return min; //知道余数为0 例:gcd(39,23) 39/23=1(余16) 23/16=1(余7) 16/7=2(余2) 7/2=3(余1) 2/1=2(余0) //到这里就停止了最小公倍数
得到最大公约数之后,求最小公倍数很简单 lcm=(a/gcd)*(b/gcd)*gcd 拿其中一个数除以最大公约数,再乘以另一个数代码 新建一个最大公约数类
class CalcGCD{ public static int calcGCG(int a,int b){ //使用辗转相除法计算最大公约数 int max=0; int min=0; if(a>b){ max=a; min=b; }else{ max=b; min=a; } while(max%min!=0){ int temp=max%min; max=min; min=temp; } return min; } }再新建一个最小公倍数的类
class CalcLCM{ public static int calcLCM(int a,int b){ int gcd=CalcGCD.calcGCG(a,b); int lcm=(a/gcd)*(b/gcd)*gcd; return lcm; } }主函数和主类
import java.util.Scanner; public class Study_20161202002{ public static void main(String[] args){ System.out.println("请输入第一个整数: "); Scanner sc=new Scanner(System.in); int a=sc.nextInt(); System.out.println("请输入第二个整数: "); int b=sc.nextInt(); System.out.println(a+"和"+b+"的最大公约数为: "); System.out.println(CalcGCD.calcGCG(a, b)); System.out.println(a+"和"+b+"的最小公倍数为: "); System.out.println(CalcLCM.calcLCM(a, b)); } }问题2:关于多重if语句的判断
原理图
语法
if(条件1){ if(条件2){ 代码块1; }else{ 代码块2; } }else{ 代码块3; }逻辑理解
如果外层if成立,则继续经过内层if 如果内层if成立,经过继续往下层if 一直成立,则顺序往下 且不管else 如果外层if不成立,则下面所有if不成立 直接到第一个else代码
public class Study_20161202004 { public static void main(String[] args){ int num; Scanner sc=new Scanner(System.in); System.out.println("请输入一个数: "); num=sc.nextInt(); if(num%3==0){ System.out.println("number id divisible by 3"); if(num%2==0){ System.out.println("number is divisible by 2"); } } else{ if(num%5==0){ System.out.println("number is divisible by 5"); } } } }输出结果
请输入一个数: 60 number id divisible by 3 number is divisible by 2