当前位置: 代码迷 >> Java相关 >> 求两正整数的最贵族约数和最小公倍数
  详细解决方案

求两正整数的最贵族约数和最小公倍数

热度:3501   发布时间:2013-02-25 21:43:34.0
求两正整数的最大公约数和最小公倍数
我的这个程序编译没错课为甚么
运行不成功呢希望前辈们帮着给看看,看哪里需要改进。小弟不胜感激import java.util.Scanner;
public class shiyan2_3
{public static void main(String args[])
{int r=0,p=0;
int max=0,min=0;
 
Scanner scanner = new Scanner(System.in);
int m=scanner.nextInt();
int n=scanner.nextInt();
if(m>n)
{max=m;
min=n; }
else
{max=n;
min=m;
}
r=max%min;
while(r!=0)
{max=min;
min=r;
}
System.out.println("做大公约数为:"+min);
p=m*n/min;
System.out.println("最小公倍数为:"+p);
    }
}
------最佳解决方案--------------------------------------------------------
#include<stdio.h>
int main()
{
int m1,n1,n,m,t,r;
printf("intput m,n:");
scanf("%d%d",&m,&n);
m1=m;
n1=n;
if(m>n)
{
 t=m;
 m=n;
 n=t;
}
r=n%m;
if(r!=0)
{
 n=m;
 m=r;
 r=n%m;
}
printf("最大公约数为:%d\n",m);
printf("最小公倍数为:%d\n",m1*n1/m);
return 0;
}
------其他解决方案--------------------------------------------------------

LZ到底有没有看我写的啊,这难道不是在你的基础上该的吗?
public class shiyan2_3
{public static void main(String args[])
{int r=0,p=0;
int max=0,min=0;
 
Scanner scanner = new Scanner(System.in);
int m=scanner.nextInt();
int n=scanner.nextInt();
if(m>n)
{max=m;
min=n; }
else
{max=n;
min=m;
}
r=max%min;
while(r!=0)
{
  int tmp=max; 
  max=min;
  min=tmp%min;
  r=min
  % min=r;
}
System.out.println("做大公约数为:"+max);
p=m*n/max;
System.out.println("最小公倍数为:"+p); 
  }
}
------其他解决方案--------------------------------------------------------
r=max%min;
while(r!=0)
{max=min;
min=r;
r = max%min; // 少了这里
}
------其他解决方案--------------------------------------------------------
逻辑上的错误,你百度  一堆方法
------其他解决方案--------------------------------------------------------
首先你的逻辑上出了点问题,所以虽然程序编写没有报错,但最终却是错误或者成了死循环,下面附上我写的一段程序,纯手工操作:

public class Test {

public static void main(String args[]) {
Test.main(6, 8);
}

public static void main(int m, int n) {
int max = 0, min = 0;

if (m > n) {
max = m;
min = n;
} else {
max = n;
min = m;
}
//r最大公约数,p最小公倍数
int p = 0, r = 1;
if (max % min == 0) {
r = min;
p = max;
} else {
//公约数从2开始
int startP = 2;
//中间生成的数
int midNum = min;
while(startP < midNum) {
boolean flag = false;
for (int i = startP; i <= midNum; i++) {
if (max % i == 0 && midNum % i == 0) {
startP = i;
r = r * i;
midNum = midNum / i;
break;
}
if (i == midNum) {
flag = true;
  相关解决方案