JAVA输入2个数,求他们的最大公约数。

JAVA输入2个数,求他们的最大公约数。,第1张

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求最大公约数等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9759246.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存