当前位置: 代码迷 >> J2SE >> 求两个数的最大公约数和最小公倍数解决方法
  详细解决方案

求两个数的最大公约数和最小公倍数解决方法

热度:159   发布时间:2016-04-24 01:25:46.0
求两个数的最大公约数和最小公倍数
我的程序代码是这样写的,应该怎样改才能完成这个功能?
import java.util.*;
public class lianxi06
{
public static void main(String args[])
{
Scanner s = new Scanner(System.in);

System.out.println("请输入第一个整数:");

int a=s.nextInt();

System.out.println("请输入第二个整数:");

int b=s.nextInt();

int m,n;

while(b!=0)
{
if(a==b)
{
m=a;
}else{
int k=a%b;
a=b;
b=k;
}
m=a;
}
System.out.println("两个数的最大公约数是:"+m);
System.out.println("最小公倍数是:"+a*b/m);
}
}

------解决方案--------------------
程序两个问题。
int m,n;没初始化。
System.out.println("最小公倍数是:"+a*b/m);
a,b已经被修改了,所以得不到正确结果。
改成下面就好了。
Java code
        int m = a, n = b;        while (n != 0){            if (m != n){                    int k = m % n;                m = n;                n = k;            }        }
------解决方案--------------------
a,b不能没0,注意加约束。
------解决方案--------------------
Java code
import java.util.*;public class lianxi06{    public static void main(String args[])    {        Scanner s = new Scanner(System.in);        System.out.println("请输入第一个整数:");        int a=s.nextInt();        System.out.println("请输入第二个整数:");        int b=s.nextInt();        int m=-1,n=b;        while(b!=0)        {            if(a==b)            {                m=a;            }else{                int k=a%b;                a=b;                b=k;            }            m=a;        }        System.out.println("两个数的最大公约数是:"+m);        System.out.println("最小公倍数是:"+a*n/m);    }}
------解决方案--------------------
你这样执行完 a和b的值都被改变了 b执行到最后肯定是0才结束的
修改如下:
 你把int m,n; 这句改成int m=0,n=a,c=b;
最后 System.out.println("最小公倍数是:"+a*b/m);里的 a*b换成 n*c 就成!
建议最好是把if语句放在一个方法中执行。
  相关解决方案