案例2最大公因数更相减损法
案例2最大公因数更相减损法
主程序
package test;
import java.util.Scanner;
public class CommonDivisor {
public static void main(String[] args) {
int num1, num2, bcd;
Scanner sc = new Scanner(System.in);
System.out.println("请输入两个正整数:");
num1 = sc.nextInt();
num2 = sc.nextInt();
sc.close();
if((bcd = commonDivisor(num1, num2)) < 0)
System.out.println("请输入正整数!");
else {
System.out.println(""+num1+"和"+num2+"的最大公约数是:"+bcd);
System.out.println(""+num1+"和"+num2+"的最小公倍数是:"+num1*num2/bcd);
}
}
static int commonDivisor(int a, int b) {//更相减损法
if(a <= 0 || b <= 0)
return -1;
while(a != b) {
if (a > b)
a -= b;
else
b -= a;
}
return b;
}
}
容易出现问题的程序(就是我们需要检验)
package test;
public class CDnew {
public static int commonDivisor(int a, int b) {
if (a <= 0 || b <= 0) {
b = -1;
} else
while (a != b) {
if (a > b)
a -= b;
else
b -= a;
}
return b;
}
}
测试代码:重点
import junit.framework.TestCase;
import test.CDnew;
public class TestBCD extends TestCase {
public void testCommonDivisor() {
CDnew a=new CDnew();
assertTrue("(-1, 0)", a.commonDivisor(-1, 0)<0);
assertEquals("(3, 3)", CDnew.commonDivisor(3, 3), 3);
assertEquals("(1, 2)", CDnew.commonDivisor(1, 2), 2);//不相等-->会报错的
assertEquals("(2, 1)", CDnew.commonDivisor(2, 1), 1);
}
}

浙公网安备 33010602011771号