黑马程序员技术交流社区

标题: 怎么在控制台上输入两个数并求出公约数和公倍数 [打印本页]

作者: lianfake    时间: 2013-7-11 10:57
标题: 怎么在控制台上输入两个数并求出公约数和公倍数
本帖最后由 杨兴庭 于 2013-7-13 15:20 编辑

怎么在控制台上输入两个数并求出最大公约数和最小公倍数

作者: lianfake    时间: 2013-7-11 10:57
自己给自己顶一个
作者: camml    时间: 2013-7-11 10:58
本帖最后由 camml 于 2013-7-11 11:08 编辑
  1. import java.util.*;
  2. class Demo{
  3.         public static void main(String args[]){
  4.                 //在控制台上输入两个不为0整数
  5.                 int m,n;
  6.                 Scanner s=new Scanner(System.in);
  7.                 System.out.println("请输入第一个数字(整数且不为0) : ");
  8.                 m=s.nextInt();
  9.                 System.out.println("请输入第二个数字(整数且不为0) : ");
  10.                 n=s.nextInt();
  11.                
  12.                 int total, r;
  13.                 total = m*n;
  14.                 do {
  15.                         //循环保证m的值是最大的那个值
  16.                         if(m<n)
  17.                           {
  18.                                 int t = m;
  19.                                      m = n;
  20.                                      n = t;
  21.                            }
  22.                 r=m%n;
  23.                 m=n;
  24.                 n=r;
  25.                 }while(r!=0);
  26.         System.out.println("最大公约数是:"+m);
  27.         System.out.println("最小公倍数是:"+total/m);
  28.         }
  29. }</P>
复制代码
希望对楼主有帮助,另外这个帖子跟你问的差不多,楼主可以看一下
http://bbs.itheima.com/thread-59333-1-1.html

作者: 杨增坤    时间: 2013-7-12 18:48
import java.util.InputMismatchException;
import java.util.Scanner;

public class Demo {
        /**
         * 球最大公约数
         *
         * @param a
         * @param b
         * @return
         */
        public static int gongyueshu(int a, int b) {
                if (a <= 0 && b <= 0) {
                        System.out.println("输入的数有小于等于0的,不考虑公约数 用返回值——1来表示");
                        return -1;
                } else {
                        int r = a > b ? b : a;
                        int y = 0;
                        for (int i = r; r >= 1; i--) {
                                if (a % i == 0 && b % i == 0) {
                                        y = i;
                                        break;
                                }
                        }
                        return y;
                }

        }
/**
* 求最小公倍数
* @param a
* @param b
* @return
*/
        public static int beishu(int a, int b) {
                if (a <= 0 && b <= 0) {
                        System.out.println("输入的数有小于等于0的,不考虑公倍数用返回值——1来表示");
                        return -1;
                } else {
                        int r = a > b ? a : b;
                        int y=-1;
                        for (int i = r; i <= a * b; i++) {
                      if(i%a==0 && i%b==0){
                              y=i;
                              break;
                      }
                        }

                        return y;
                }
        }

        public static void main(String[] agrs) {
                Scanner in = new Scanner(System.in);
                System.out.println("请输入两个整数:");
                try{
                        int a=in.nextInt();
                        int b=in.nextInt();
                        int yue=gongyueshu(a, b);
                        int bei=beishu(a, b);
                        if(yue!=-1 && bei!=-1){
                                System.out.println(a+"和"+b+"的最大公约数"+yue);
                                System.out.println(a+"和"+b+"的最小公倍数"+bei);
                        }else{
                                System.out.println("输入的整数有小于等于零的!");
                        }
                       
                }catch(InputMismatchException e ){
                        System.out.println("输入的不是整数");
                }catch(Exception e){
                        e.printStackTrace();
                }
               
               
        }
}
结果;
请输入两个整数:
15
20
15和20的最大公约数5
15和20的最小公倍数60

希望对你有帮助!


作者: stormdzh    时间: 2013-7-13 18:39
用辗转相除法咯!




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