package comcode;
import javautilScanner;
public class TestRun {
public static void main(String[] args) {
int m;
int n;
int temp;
Scanner input = new Scanner(Systemin);
m = inputnextInt();
n = inputnextInt();
if (m > n) {
temp = n;
} else {
temp = m;
}
for (int i= temp; i >= 1; i--) {
if (m % i == 0 && n % i == 0) {
temp=i;
break;
}
}
Systemoutprintln("temp:" +temp );
}
}
1、break指跳出当前循环,当i从temp开始减小到为公约数时,break跳出循环就好了,return指跳出整个方法,所以后面的语句都不执行了。
2、最后输出的temp值你的程序是没有变的,temp是个参照,i才是变化的数字,当i减小到合要求时,将I赋值给temp此时temp才为公约数,否则temp一直是输入数值中较小的那个。
3、两个数要除的数值应该为逐渐减小的 i,而不是一直不变的temp
package test;
public class Gygb {
public static void main(String[] args) {
int m=9,n=6;
int temp = 0;
if(m < n){
temp = m;
m = n;
n = temp;
}
int index = 1;
//最大公倍数
int gb = 0;
while(true){
index++;
if(m%n==0){
Systemoutprintln("最大公倍数是=="+m);
break;
}
gb = nindex;
if(m>gb){
continue;
}
if(gb%m==0){
Systemoutprintln("最大公倍数是=="+gb);
break;
}
Systemoutprintln("1");
}
//最小公约数
int gy = n/2+1;
while(true){
gy--;
if(m%n==0){
Systemoutprintln("最大公约数是=="+n);
break;
}
if(m%gy==0){
Systemoutprintln("最大公约数是=="+gy);
break;
}
}
}
}
例如:数字m=6,和数字n=8
为了省去相同的求最大公约数的代码,首先对m n进行比较大小
if(m<n)
{int temp=0;
temp=m;
m=n;
n=temp;
}
以上代码将较大的数都设定为m,利用一个temp保留小的数,将m的地址用来保留n的值,然后将n的位置放入temp的值(小的数)。
int r=m%n;
while(r!=0)
{m=n;
n=r;
r=m%n;
}
return n;
意思就是8除以6于2,那r=2,且不等于零,循环开始……
用n的值赋给m,r的值赋给n,即6除以2于0 此时的r为0,循环结束,返回n的值就是2,所以最大公约数就是2;
详细代码请点下面连接
>
//求最大公约数:较大的数除以较小的数,然后将较小的数作为下一次的大数,余数作为小数,直到较小的数为0,返回较大的数
public static int big(int num1,int num2){
int big = 0;
int small = 0;
if(num1>num2){
big = num1;
small = num2;
}else{
big = num2;
small = num1;
}
if(small==0){
Systemoutprintln("除数不能为0");
return 0;
}
while(true){
if(small==0){
return big;
}else{
int temp = big;
big = small;
small = temp%small;
}
}
}
对于为什么会出现那个问题我也不理解
对你的代码修改了下,可以运行出正确结果了
import javautilScanner;
class Max{
public int f(int a,int b){
return i(a,b);
}
int i(int a, int b){
if(a<b){
int m;
m=a;
a=b;
b=m;
}
if(a%b==0) {
return b;
}
else {
return i(b,a%b);
}
}
}
public class Min extends Max{
public int f(int a,int b){
int m;
m = superf(a, b);
return ab/m;
}
public static void main(String[] args) {
Max gcd=new Max();
Min gcd1=new Min();
Scanner sc1=new Scanner(Systemin);
Scanner sc2=new Scanner(Systemin);
Systemoutprintln("请输入两个正整数:");
int a=sc1nextInt();
int b=sc2nextInt();
int m=gcdf(a, b);
Systemoutprintln(a+"和"+b+"的最大公约数为:"+m);
int n=gcd1f(a, b);
Systemoutprintln(a+"和"+b+"的最小公倍数为:"+n);
}
}
以上就是关于JAVA输入2个数,求他们的最大公约数。全部的内容,包括:JAVA输入2个数,求他们的最大公约数。、java 方法调用、用java求最大公约数等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)