求最大公约数和最小公倍数引发的一些问题
2014-04-17 11:50
218 查看
今天上软件工程课时老师让用PAD图画出求两个整数的最小公倍数和最小公约数的算法。
果断想到了辗转相除法,然后就继续了。。。。。。。。
碰到的第一个问题是:
一下子转不过来x ,y;这两个值该怎么赋值。
一开始想的是:int r=x%y;用r来作为判断标准:
当r等于零时就不用while循环。除数就为最大公约数,最小公倍数则为:x*y/最大公约数
当r不等于零时,则用while(r!=0){
int temp=x/y;
x=y;
y=temp;
}
来求得最大公约数。再求得最小公倍数:x*y/最大公约数
显然:这是不能完成的,因为此时x与y的值是辗转相除后的值,不是一开始输入的x,y值。而求最小公倍数是要求x,y是开始输入的两个整数值的乘积再除于最大公约数
碰到的第二个问题是:
这里使用的是publicstatic void qiu(int x,int y)来求解最大公约数和最小公倍数。不解的是这里为什么要定义成静态的?
原来是因为:如果不设置为静态的话,就要用对象来调用该方法。如果一个方法不是静态的,则要先实例化该类,比如要这样 qiu t=new qiu();
然后才能调用
下面则为解决这两个困惑后的代码:
import java.util.Scanner;
public class GBS {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner s=new Scanner(System.in);
int t=0;
int x=s.nextInt();
int y=s.nextInt();
if(x<y){
int temp=x;
x=y;
y=temp;
qiu(x, y);
}
else{
qiu(x, y);
}
}
public static void qiu(int x, int y) {
int t=0;
int max=x;
int min=y;
int r=max%min;
if(r==0){
t=max/min;
System.out.println("最大公约数为:"+min);
System.out.println("最小公倍数为:"+(x*y)/min);
}
else {
while(r!=0){
t=max/min;
r=max%min;
max=min;
min=r;
}
System.out.println("最大公约数为:"+max);
System.out.println("最小公倍数为:"+(x*y)/max);
}
}
}
控制台输入:12 15
12
15
最大公约数为:3
最小公倍数为:60
果断想到了辗转相除法,然后就继续了。。。。。。。。
碰到的第一个问题是:
一下子转不过来x ,y;这两个值该怎么赋值。
一开始想的是:int r=x%y;用r来作为判断标准:
当r等于零时就不用while循环。除数就为最大公约数,最小公倍数则为:x*y/最大公约数
当r不等于零时,则用while(r!=0){
int temp=x/y;
x=y;
y=temp;
}
来求得最大公约数。再求得最小公倍数:x*y/最大公约数
显然:这是不能完成的,因为此时x与y的值是辗转相除后的值,不是一开始输入的x,y值。而求最小公倍数是要求x,y是开始输入的两个整数值的乘积再除于最大公约数
碰到的第二个问题是:
这里使用的是publicstatic void qiu(int x,int y)来求解最大公约数和最小公倍数。不解的是这里为什么要定义成静态的?
原来是因为:如果不设置为静态的话,就要用对象来调用该方法。如果一个方法不是静态的,则要先实例化该类,比如要这样 qiu t=new qiu();
然后才能调用
下面则为解决这两个困惑后的代码:
import java.util.Scanner;
public class GBS {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner s=new Scanner(System.in);
int t=0;
int x=s.nextInt();
int y=s.nextInt();
if(x<y){
int temp=x;
x=y;
y=temp;
qiu(x, y);
}
else{
qiu(x, y);
}
}
public static void qiu(int x, int y) {
int t=0;
int max=x;
int min=y;
int r=max%min;
if(r==0){
t=max/min;
System.out.println("最大公约数为:"+min);
System.out.println("最小公倍数为:"+(x*y)/min);
}
else {
while(r!=0){
t=max/min;
r=max%min;
max=min;
min=r;
}
System.out.println("最大公约数为:"+max);
System.out.println("最小公倍数为:"+(x*y)/max);
}
}
}
控制台输入:12 15
12
15
最大公约数为:3
最小公倍数为:60
相关文章推荐
- OAuth 2.0 Bearer Token Profile Vs MAC Token Profile
- 百度贴吧发帖 python代码片段
- http://blog.sina.com.cn/s/blog_6a01140c0100wimi.html
- error while loading shared libraries *.so.*
- asp.net中的<%%>形式的详细用法实例讲解
- 海量数据库设计——第三课:索引(笔记)
- svn的branch/tag
- Cocos2d-x 学习随记之一 hello,world工程注释!!
- Win7下使用Putty代替超级终端通过COM串口连接开发板方法
- IOS解析JSON库
- 内存分配问题
- 矩阵相乘的快速算法
- Red Hat Enterprise Linux 5下有关dmrc文件错误的解决办法
- 安卓提取经纬度与系统时间
- powerdesigner连接mysql
- Unity调用IOS相关接口获取手机型号(CSharp)
- FormsAuthentication.SignOut() 会删除所有登录凭证
- 我给老师发的邮件
- android自动打包方法(ant+proguard+签名)
- 笔记20--RatingBar