java实现最大公约数和最小公倍数(每天一道算法题)

题目:输入两个正整数,求其最大公约数和最小公倍数。

程序思路:

  1. 除数不能为0
  2. 将较大的那个数对较小的那个数取余;(如果a>=b,那就a%b),
  3. 取余得出的结果为下次预算的除数,上面较小的那个数将作为被除数
  4. 知道运算到较小为0时,返回较大的数,这个数就是最大公约数
  5. 最小公倍数就是 原来的两个正整数的积除以最大公约数。

下面java代码:

package com.imooc;
import java.util.Scanner;
public class Suanfa3 {
    public static void main(String[] args) {
        System.out.println("请输入两个整数:");
              Scanner input1 =new Scanner(System.in);
              int a = input1.nextInt();
              int b =input1.nextInt();
              int u= a*b;   //  用u来保存 a*b 的值
              while(b>0){       
                  if(a>=b&&a%b!=0){
                    int t = b;
                        b = a%b;       // 利用了递归算法
                        a = t;
                     }else if(a%b==0){
                        break;    // a刚好是b的倍数
                    }else{
                        int  s = a;      // 当  a < b 时 ,a b的值交换
                             a = b;
                             b = s;       
                  } 
             } 
            System.out.println("两个数的最大公约数为:"+b); 
            System.out.println("两个数的最小公倍数为:"+u/b);
          }
      }

后来上网查了一下资料,才发现,著名的欧几里德算法比这个算法更好用。有兴趣的朋友可以了解一下。
下面是欧几里德算法的百度百科链接:
http://baike.baidu.com/link?url=tXI15Y6sJcHYfnOl–ggjHTnJzL8AClvpCDrrvMwuHp5GuET-rO8pNu5j76D9smNY6efe5VC8dPZ2wImqvlok_

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值