第一道西西里----關於兩數的最大公約數

一個月黑風高的上午,我正上着專業水課,無聊之際想起師兄推薦的西西里,遂打開了這個網站。
這裏寫圖片描述

(師兄推薦的理由是上面有制服誘惑(╯‵□′)╯︵┻━┻)
那麼來看看我的第一道西(song)西(fen)裏(ti)吧


這裏寫圖片描述

emmmmm看起來不會很難
程序要求的關鍵應該是輸入a,b,c,d,然後輸出a/b+c/d.

很自然想到對a/b+c/d進行通分,相乘,得到(a*d+c*b)/b*d
但顯然直接這樣輸出是不行的,因爲題目要求結果應是最簡分數,所以我的想法是求出分子分母的最大公約數,在讓分子分母分別除以這個約數,得到新的最簡的分子分母,如果分母爲1,則直接輸出分子。

於是便有了下面的程序

#include<stdio.h>
int suan(int a,int b)
//算最大公約數的程序 
//更相減損數 
{
    int c;
    if (a==b)
        return a;
    if (a<b)
        b=b-a;
    else
        a=a-b;
    c=suan(a,b);
    return c;
}
int main(void)
{
    int n; 
    scanf("%d",&n);
    //所要輸入的數據的組數 
    int num[4*n];
    //儲存數據的數組 
    int i;
    //計數變量 
    for(i=0;i<4*n;i++)
    {
        scanf("%d",&num[i]);
        //輸入所有數據 
    }
    int z,m;//儲存未化簡的分子分母 
    int g;//儲存最大公約數 
    int a,b;//儲存最終化簡的分子分母 
    for(i=0;i<4*n;i=i+4)
        {
            z=num[0+i]*num[3+i]+num[1+i]*num[2+i];
            //計算臨時分子 

            m=num[1+i]*num[3+i];
            //計算臨時分母

            g=suan(z,m);
            //得到最大公約數 

            a=z/g;
            //用最大公約數化簡分子 

            b=m/g;
            //用最大公約數化簡分母 

            if(b==1)
                printf("%d\n",a);
            else 
                printf("%d/%d\n",a,b);
                //輸出結果 
    }
    return 0;


 } 

以上

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章