分數可以表示為分子/分母
的形式。編寫一個程序,要求用戶輸入一個分數,然后將其約分為最簡分式。最簡分式是指分子和分母不具有可以約分的成分了。如6/12可以被約分為1/2。當分子大於分母時,不需要表達為整數又分數的形式,即11/8還是11/8;而當分子分母相等時,仍然表達為1/1的分數形式。
輸入格式:
輸入在一行中給出一個分數,分子和分母中間以斜杠/分隔,如:12/34
表示34分之12。分子和分母都是正整數(不包含0,如果不清楚正整數的定義的話)。
提示:在scanf的格式字符串中加入/,讓scanf來處理這個斜杠。
輸出格式:
在一行中輸出這個分數對應的最簡分式,格式與輸入的相同,即采用分子/分母的形式表示分數。如 5/6表示6分之5。
輸入樣例:
60/120
輸出樣例:
1/2
解題思路:
利用輾轉相除法
求最大公約數。輾轉相除法是一個很古老的算法,應該記住。會用就行,無須證明。
其中出現了小插曲,在自己的機器上怎么測試結果都沒錯,但是提交代碼后答案總是不正確。 之前的代碼是這樣的:
int temp;
while (temp)沒有給 temp 賦初值....不同的編譯器會給變量不同的初始值。這樣就會導致出錯。
解題代碼:
#include<stdio.h>
int main ()
{
int numerator, denominator;
scanf("%d/%d", &numerator, &denominator);
int a = numerator, b = denominator;
int temp;
while (b) {
temp = a % b;
a = b;
b = temp;
}
printf("%d/%d\n", numerator/a, denominator/a);
return 0;
}