A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

先上代码:
[Java] 纯文本查看 复制代码
import java.util.ArrayList;
import java.util.Iterator;

public class FractionSimple {

	public static void main(String[] args) {
		demo1();
		demo2();
		
	}

	private static void demo2() {
		Fraction f = new Fraction(241241242,235352);
		
		long time1 = System.nanoTime();
		for (int i=0;i<10000;i++){
			f.simple();
		}
		long time2 = System.nanoTime();
		System.out.println(time2 - time1);
		
		time1 = System.nanoTime();
		for (int i=0;i<10000;i++){
			f.simple2();
		}
		time2 = System.nanoTime();
		System.out.println(time2 - time1);
		
		time1 = System.nanoTime();
		for (int i=0;i<10000;i++){
			f.simple3();
		}
		time2 = System.nanoTime();
		System.out.println(time2 - time1);
	}

	private static void demo1() {
		ArrayList<Fraction> list = new ArrayList<>();
		list.add(new Fraction(1920,1080));
		list.add(new Fraction(1600,900));
		list.add(new Fraction(1440,900));
		list.add(new Fraction(1366,768));
		list.add(new Fraction(1360,768));
		list.add(new Fraction(1280,800));
		list.add(new Fraction(1280,768));
		list.add(new Fraction(1280,720));
		list.add(new Fraction(1024,768));
		list.add(new Fraction(800,600));
		
		Iterator<Fraction> it = list.iterator();
		while (it.hasNext()) {
			Fraction frac = it.next();
			System.out.print(frac.numerator + " x " + frac.denominator);
			System.out.println(" 的比例是:" + frac.simple3());
			
		}
	}

}


class Fraction {
	int numerator;
	int denominator;
	
	Fraction (){
		
	}
	
	Fraction (int n, int d) {
		numerator = n;
		denominator = d;
	}

	public int getNumerator() {
		return numerator;
	}

	public void setNumerator(int numerator) {
		this.numerator = numerator;
	}

	public int getDenominator() {
		return denominator;
	}

	public void setDenominator(int denominator) {
		this.denominator = denominator;
	}
	
	public String simple() {
		int a = numerator;
		int b = denominator;
		int c = a >b ? b:a;  // 把 a和b 较小的数赋值给c
		int i = 1;
		while (i < c) {
			if (a%i == 0 && b%i == 0) {
				a = a / i;
				b = b / i;
				c = a < b ? a:b;
				i = 1;
			}
			i++;
		}
		String str = a + " : " + b;
		return str;
	}
	
	public String simple2() {
		int a = numerator;
		int b = denominator;
		int c = a >b ? b:a;  // 把 a和b 较小的数赋值给c
		int i = c;
		while (i > 0) {
			if (a%i == 0 && b%i == 0) {
				a = a / i;
				b = b / i;
				c = a < b ? a:b;
//				i = 1;
			}
			i--;
		}
		String str = a + " : " + b;
		return str;
	}
	
	public String simple3() {
		int a = numerator;
		int b = denominator;
		int max;
		int min;
		int temp;
		if (a > b){
			max = a;
			min = b;
		}else {
			max = b;
			min = a;
		}
		
		while (min!=0) {    // 循环结果max是最大公约数
			temp = max%min;
			max = min;
			min = temp;
		}
		
		a = a / max;
		b = b / max;
		String str = a + " : " + b;
		return str;
	}
}




评分

参与人数 1黑马币 +5 收起 理由
橘子哥 + 5

查看全部评分

3 个回复

倒序浏览
分数 Fraction 分子 numerator 分母 numerator
方法一:a和b较小的数是c,循环从i到c,(从小到大,左右包含),分别去除以a和b
[Java] 纯文本查看 复制代码
public String simple(int a,int b) {
    int c = a >b ? b:a;  // 把 a和b 较小的数赋值给c
    int i = 1;
    while (i < c) {
        if (a%i == 0 && b%i == 0) {
            a = a / i;
            b = b / i;
            c = a < b ? a:b;
            i = 1;
        }
        i++;
    }
    String str = a + " / " + b;
    return str;
}

方法二:a和b较小的数是c,循环从c到i (从大到小,左右包含),分别去除以a和b

[Java] 纯文本查看 复制代码
public String simple2(int a,int b) {
    int c = a >b ? b:a;  // 把 a和b 较小的数赋值给c
    int i = c;
    while (i > 0) {
        if (a%i == 0 && b%i == 0) {
            a = a / i;
            b = b / i;
            c = a < b ? a:b;
        }
        i--;
    }
    String str = a + " : " + b;
    return str;
}

方法二比方法一好在只循环1次,但实际上运算时间方法二比方法一略长。这两种效率都比较低,不可取。建议用辗转相除法,简称辗除法。
方法三:用辗除法求最大公约数,然后再分别去除以a和b一次即可。

[Java] 纯文本查看 复制代码
public String simple3(int a,int b) {
    int max;
    int min;
    int temp;
    if (a > b){ // max是较大的数,min是较小的数
        max = a;
        min = b;
    }else {
        max = b;
        min = a;
    }
 
    while (min!=0) {    // 循环结果max是最大公约数
        temp = max%min;
        max = min;
        min = temp;
    }
 
    a = a / max;
    b = b / max;
    String str = a + " : " + b;
    return str;
}






评分

参与人数 1技术分 +3 收起 理由
r1503882525 + 3 赞一个!

查看全部评分

回复 使用道具 举报
顶起来!!!
回复 使用道具 举报
厉害吧啊啊啊啊啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马