题解 | #求最小公倍数#

求最小公倍数

http://www.nowcoder.com/practice/22948c2cad484e0291350abad86136c3

1.1 递归结束条件

1. 有一个元素为 1
2. 没有公因数

1.2 计算

所有公因数相乘

import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextInt()) { // 注意 while 处理多个 case
            int a = in.nextInt();
            int b = in.nextInt();
            System.out.println(lower(a, b));
        }
    }
    
    public static int lower(int a, int b) {
        // 退出条件有两个
        // 1. a b 其中一个为 1,最小公倍数是二者的积
        if (a == 1 || b == 1) {
            return a * b;
        }
        
        // 找当前数字的最小公因数
        int c = 0;
        if (a % 2 == 0 && b % 2 == 0) {
            c = 2;
        } else if (a % 3 == 0 && b % 3 == 0) {
            c = 3;
        } else if (a % 5 == 0 && b % 5 == 0) {
            c = 5;
        } else if(a % 7 == 0 && b % 7 == 0) {
            c = 7;
        } else {
            // 2. 没有公因数
            return a * b;
        }
        
        // 3. 正常计算:最小公倍数就是所有公因数相乘
        // 执行到此处,说明可以整除
        return c * lower(a / c, b / c);
    }
}
全部评论

相关推荐

09-23 08:41
已编辑
门头沟学院 Java
牛客吹哨人:可恶!它越来越嚣张了...哨哥晚点统一更新到黑名单:能救一个是一个!26届毁意向毁约裁员黑名单https://www.nowcoder.com/discuss/1525833
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务