Android成长日记——不定期更新的小程序

更新时间又太晚了,拖的时间太长了。下次注意,争取每天一更。
今天的主题是算法,以后一个月的时间都是关于算法的了。

问题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(余716/7=2(余27/2=3(余12/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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值