[TIOJ] 1040. C.連分數

題目連結:http://tioj.infor.org/problems/1040
這題算是數學題吧(?,但也不是什麼難的數學,先說連分數的基本求法就是直接算$\lfloor \frac{a}{b} \rfloor$這東東就會是第一個整數,那顯然的$\frac{a}{b} - \lfloor \frac{a}{b} \rfloor$會是後面那串分數,那就再看$\frac{1}{\frac{a}{b} - \lfloor \frac{a}{b} \rfloor}$(=$\frac{b}{a - b \lfloor \frac{a}{b} \rfloor}$)然後用跟上面同樣的方法算下去,直到$\frac{a}{b} - \lfloor \frac{a}{b} \rfloor = 0$時停止,但是我們在實作時不能真的用double之類的,不然你可能會被浮點數誤差搞死(或許只是我太廢拉XD,所以要做一點基本的數學運算,這邊就不贅述,大概從我的code應該就可看出來在幹嘛了。 溫馨小提示(?有可能一開始b就是0
#include <stdio.h>

void weirdGCD(int,int,bool);

int main(){
	int n;
	scanf("%d",&n);
	while(n--){
		int a, b;
		scanf("%d%d",&a,&b);
		printf("%d/%d = %d",a,b,a/b);
		weirdGCD(a,b,0);
		puts("");
	}
}

void weirdGCD(int a,int b,bool tf){
	if(b==0)return;
	int c=a/b;
	if(!tf){
		weirdGCD(b,a-b*c,1);
	}else if(a-b*c == 0){
		printf("+1/%d",c);
		return;
	}else{
		printf("+1/{%d",c);
		weirdGCD(b,a-b*c,1);
		putchar('}');
	}
}

留言

這個網誌中的熱門文章

[NPSC] 2009初賽 E. 檸檬汽水傳說

[TIOJ] 1902. 「殿仁.王,不認識,誰啊?」,然後他就死了……

[AtCoder] [經典競程 90 題] 024 - Select +/- One(★2)