辗转相除法求最大公约数java

高手帮我看下importjavax.swing.JOptionPane;publicclassGreatestCommonDivisor{/**mainmethod*/p... 高手帮我看下
import javax.swing.JOptionPane;
public class GreatestCommonDivisor {

/** main method */
public static void main(String[] args) {
//prompt the user to enter two integers
String s1 = JOptionPane.showInputDialog(null,"please input a integer","p79",JOptionPane.QUESTION_MESSAGE);
String s2 = JOptionPane.showInputDialog(null,"please input another integer","p79",JOptionPane.QUESTION_MESSAGE);
int m1 = Integer.parseInt(s1);
int m2 = Integer.parseInt(s2);
int n1 = m1>m2 ? m1:m2;
int n2 = m1+m2-n1;
do {
int r = n1/n2;
n1 = n2;
n2 = r;
} while (r!=0);
JOptionPane.showMessageDialog(null,"the great divisior is:" +n2,"p79",JOptionPane.INFORMATION_MESSAGE);
}
}
这里do...while中的括号r!=0为什么“r cant be rosolved"呢?
应该怎么改程序才好运行呢!!
展开
 我来答
千锋教育
2015-12-02 · 做真实的自己 用良心做教育
千锋教育
千锋教育专注HTML5大前端、JavaEE、Python、人工智能、UI&UE、云计算、全栈软件测试、大数据、物联网+嵌入式、Unity游戏开发、网络安全、互联网营销、Go语言等培训教育。
向TA提问
展开全部
辗转相除法,是求两个正整数之最大公因子的算法。
辗转相除法的算法过程如下:设两数为a、b(a>b),求a和b最大公约数(a,b)的步骤如下:用a除以b,得
a÷b=q,余数r1(0≤r1)。若r1=0,则(a,b)=b;若r1不等于0,则再用b除以r1,得b÷r1=q,余数r2
(0≤r2).若r2=0,则(a,b)=r1,若r2不等于0,则继续用r1除以r2,如此下去,直到能整除为止,其最后一个为被除数的余数的除数即为
(a, b)。
具体事例代码如下:

public class Demo2 {
public static void main(String[] args) {
int a = 49,b = 91;
while(b != 0) {
int yushu = a % b; //记录余数
a = b; //将b值赋给a值
b = yushu; //将余数赋给b值
}
System.out.println(a);
}
}
辗转相除法基于如下原理:两个整数的最大公约数等于其中较小的数和两数的相除余数的最大公约数。
趣事情
2015-11-14 · 知道合伙人互联网行家
趣事情
知道合伙人互联网行家
采纳数:517 获赞数:5452
电脑技术,软件开发。移动开发。网站建设相关专业知识。都可以提供解答和相关技术指导。

向TA提问 私信TA
展开全部
do...while中的括号r!=0为什么“r cant be rosolved建议用辗转相除法。
列子比如:49和91
a b temp
49 % 91 = 49
91 % 49 = 42
49 % 42 = 7
42 % 7 = 0
所以最大公约数就是7.

public class T {
public static void main(String[] args) {
int gcd = gcd(91, 49);
System.out.println(gcd);
}

/**
* greatest commond divisor
* @param a
* @param b
* @return
*/
public static int gcd(int a, int b) {
while(b != 0) {
int temp = a%b;
a = b;
b = temp;
}
return a;
}

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
金鱼8884
2015-10-29 · 知道合伙人数码行家
金鱼8884
知道合伙人数码行家
采纳数:124 获赞数:14950
学生

向TA提问 私信TA
展开全部
比较好用的是辗转相除法。
比如:49和91
a b temp
49 % 91 = 49
91 % 49 = 42
49 % 42 = 7
42 % 7 = 0
所以最大公约数就是7.

public class T {
public static void main(String[] args) {
int gcd = gcd(91, 49);
System.out.println(gcd);
}

/**
* greatest commond divisor
* @param a
* @param b
* @return
*/
public static int gcd(int a, int b) {
while(b != 0) {
int temp = a%b;
a = b;
b = temp;
}
return a;
}

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-06-06
展开全部
int m1 = Integer.parseInt(s1);
int m2 = Integer.parseInt(s2);
int n1 = m1>m2 ? m1:m2;
int n2 = m1+m2-n1;
do {
int r = n1/n2;
n1 = n2;
n2 = r;
} while (r!=0);

----

int m1 = Integer.parseInt(s1);
int m2 = Integer.parseInt(s2);
int r = 0;
while(m2!=0)
{
r=m1%m2;
m1=m2;
m2=r;
}

上面换未下面那个就好了,JOptionPane.showMessageDialog这里的自己改吧~
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-06-06
展开全部
作用域有点问题
r是在do内定义的,括号结束后它的作用域也结束了
do附近改下:
int n2 = m1+m2-n1;
int r = n1/n2;
do {
r = n1/n2;
n1 = n2;
再试下看可以不
PS:我没有看逻辑
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式