案例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);
    }

}

 

posted @ 2025-04-06 10:34  Annaprincess  阅读(24)  评论(0)    收藏  举报