辗转相除法求最大公约数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"呢?
应该怎么改程序才好运行呢!! 展开
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"呢?
应该怎么改程序才好运行呢!! 展开
5个回答
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);
}
}
辗转相除法基于如下原理:两个整数的最大公约数等于其中较小的数和两数的相除余数的最大公约数。
辗转相除法的算法过程如下:设两数为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 · 知道合伙人互联网行家
关注
展开全部
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;
}
}
列子比如: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;
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
比较好用的是辗转相除法。
比如: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;
}
}
比如: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这里的自己改吧~
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:我没有看逻辑
r是在do内定义的,括号结束后它的作用域也结束了
do附近改下:
int n2 = m1+m2-n1;
int r = n1/n2;
do {
r = n1/n2;
n1 = n2;
再试下看可以不
PS:我没有看逻辑
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |