【笔试】6、求其最大公约数和最小公倍数

来源:互联网 发布:并发编程实践 编辑:程序博客网 时间:2024/05/16 11:58
/** * 题目:输入两个正整数m和n,求其最大公约数和最小公倍数。   在循环中,只要除数不等于0,用较大数除以较小的数, * 将小的一个数作为下一轮循环的大数,取得的余数作为下一轮循环的较小的数, * 如此循环直到较小的数的值为0,返回较大的数,此数即为最大公约数,最小公倍数为两数之积除以最大公约数。 * 时间:2015年7月28日09:00:05 * 文件:lianxi06.java * 作者:cutter_point */package bishi.zuixin50.t2015728;import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.InputStreamReader;public class lianxi06 {//我们用辗转相除法来求最大公约数public static int GreatestCommonDivisor(int m, int n){//首先我们假定一个余数是最大公约数int chushu = m % n;//两数的余数,要么就是最大公约数,要么就是一个除数int beichu = n; //这个是我们接下来的被除数while(chushu != 0){//当余数不为0的时候,说明还没有到最大公约数int temp = chushu; //我们把除数备份chushu = beichu % chushu; //求得新的除数beichu = temp;  //吧原来的除数作为新的被除数}//指导除数为0的时候说明到了最后的结果,最大公约数就是此时的被除数return beichu;}//最大公倍数=两数的积/最大公约数public static int LeaseCommonMultiple(int m, int n){//求得最大公约数int greatestCommonDivisor = lianxi06.GreatestCommonDivisor(m, n);return (m * n) / greatestCommonDivisor;}public static void main(String[] args) throws Exception{//System.out.println(System.getProperty("java.class.path"));//System.out.println(new lianxi06().getClass().getProtectionDomain().getCodeSource().getLocation());//我们从文件中读取相应的数据FileInputStream infile = new FileInputStream(new File("source/zuixin50/lianxi06input.txt"));BufferedReader br = new BufferedReader(new InputStreamReader(infile, "utf-8"));//我们把结果输出到相应的文件FileOutputStream fos = new FileOutputStream(new File("source/zuixin50/lianxi06output.txt"));//读取一行数据String line = "";while( ( line = br.readLine() ) != null ){//每行数据我们用“\t”隔开String a[] = line.split("\t");int m, n;//吧这两个数转化为整数m = Integer.parseInt(a[0]);n = Integer.parseInt(a[1]);String out = m + " 和 " + n + "的最大公约数是:" + lianxi06.GreatestCommonDivisor(m, n) + "\n" + "\t最小公倍数是:" + lianxi06.LeaseCommonMultiple(m, n) + "\n";System.out.println(out);fos.write(out.getBytes());}//关闭流fos.close();br.close();infile.close();}}

0 0
原创粉丝点击