黑马程序员技术交流社区

标题: 输入两个正整数m和n,求其最大公约数和最小公倍数。 [打印本页]

作者: 1334071171    时间: 2016-7-4 23:24
标题: 输入两个正整数m和n,求其最大公约数和最小公倍数。
输入两个正整数m和n,求其最大公约数和最小公倍数。

作者: 代码是什么    时间: 2016-7-4 23:24
/**
*辗除法:比如:20 和 16 的最大公约数是:4 ;
*也就是说(20-16) 和 16 的最大公约数是4 。
*就是利用这个原来反复执行来求最大公约数的。
*/
import java.io.*;
import java.util.*;
public class GreatestCommonDivisor
{
private int a,b ;
public static void main(String args[])
{
   new GreatestCommonDivisor().cal();
}
public void cal()
{
   BufferedReader input = new BufferedReader(
          new InputStreamReader(System.in));
  
   System.out.println("请输入两个正整数,以空格隔开:");
  
   //获取两个正整数 a 和 b;
   try
   {
    String in = input.readLine();
    StringTokenizer tokenizer = new StringTokenizer(in);
    a = Integer.parseInt(tokenizer.nextToken());
    b = Integer.parseInt(tokenizer.nextToken());
    if(a<0 || b<0)
    {
     System.out.println("1/请输入两个正整数!!!");
     System.exit(0);
    }
   }
   catch (Exception e)
   {
    System.out.println(e);
    System.out.println("2/请输入两个正整数!!!");
    System.exit(0);
   }
   // 保存这a、b将来输出时用
   int oldA = a;
   int oldB = b;
   // 为了下面的while循环,如果a>b交换两个数
   if (a>b)
   {
    a = oldB;
    b = oldA;
   }
  
   //利用辗除法求a、b的最大公约数
        int temp = b%a;
   while (temp !=0)
   {
    b = a ;
    a = temp ;
    temp = b%a;
    if(a==0)
    {
     System.out.println(oldA+"和"+oldB+"的最大公约数是:"+a);
     break;
    }
   }
  
   if (temp == 0)
   {
    System.out.println(oldA+"和"+oldB+"的最大公约数是:"+a);
    System.exit(0);
   }
}
}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2