7-35 有理數均值 (20 分)

7-35 有理數均值 (20 分)


在做這個題的時候,開始的時候一直用for循環來找公因子,但是第三個測試點一直過不去。
然後我在網上搜搜了搜資料發現,我和AC的不同只是在尋找約數的方法上,他們用的是輾轉相除法來求最大公約數,我修改程序後成功通過。

AC 代碼

#include <stdio.h>
#include <stdlib.h>
int divsor(int a,int b);
int main()
{
	int n;
    int g;
	int mol[100] = {0};
	int deno[100] = {0};
	int mol0=0,deno0=1;
	scanf("%d",&n);
	for(int i=0;i<n;i++) scanf("%d/%d",&mol[i],&deno[i]);
	for(int i=0;i<n;i++){
		mol0 = mol0*deno[i] + mol[i]*deno0;
		deno0 = deno0*deno[i];
		g = divsor(mol0,deno0);
     	mol0 /= g;
      	deno0 /= g;
	}
	deno0 *= n; 
	g = divsor(mol0,deno0);
    mol0 /= g;
    deno0 /= g;
    if(mol0 == 0)
        printf("%d\n", mol0);    
    else if(deno0 == 1)
        printf("%d\n", mol0);
    else
        printf("%d/%d\n", mol0, deno0);
    //printf("%d\n",gcd(480,2880));
    return 0;
}
int divsor(int a,int b)
{
    int max,min;
    while(1){
        if(a == 0 || b == 0) return 1;
        max = (a>b)?a:b;
        min = (a>b)?b:a;
        a = max%min;
        b = min;
        if(a == 0 || b == 0) return (a>b)?a:b;
        else if(max%min == max) return 1;
    }
} 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章