L1 009 N個數求和 20 分

2021-09-25 20:00:15 字數 1680 閱讀 3747

單位: 浙江大學

時間限制: 400 ms

記憶體限制: 64 mb

**長度限制: 16 kb

本題的要求很簡單,就是求n個數字的和。麻煩的是,這些數字是以有理數分子/分母的形式給出的,你輸出的和也必須是有理數的形式。

輸入第一行給出乙個正整數n(≤100)。隨後一行按格式a1/b1 a2/b2 ...給出n個有理數。題目保證所有分子和分母都在長整型範圍內。另外,負數的符號一定出現在分子前面。

輸出上述數字和的最簡形式 —— 即將結果寫成整數部分 分數部分,其中分數部分寫成分子/分母,要求分子小於分母,且它們沒有公因子。如果結果的整數部分為0,則只輸出分數部分。

5

2/5 4/15 1/30 -2/60 8/3

3 1/3
2

4/3 2/3

2
3

1/3 -1/6 1/8

7/24
#include#include#include#includeusing namespace std;

#define ll long long

ll **add(ll b[2][2]); //返回兩個數相加的值

ll **simplify(ll **c); //返回簡化後的分數

ll mincommonmultiple(ll n, ll m); //返回最小公倍數

ll maxcommonfactor(ll n, ll m); //返回最大公因數

int main() else

} else if(c[0][0]!=0) else

return 0;

}//返回兩個數相加的值

ll **add(ll b[2][2])

//找到最小公倍數

ll min = mincommonmultiple(b[0][1], b[1][1]);

b[0][0] *= min/b[0][1];

b[1][0] *= min/b[1][1];

c[0][0] = b[0][0] + b[1][0];

c[0][1] = min;

if(c[0][0] == 0)

//返回簡化後的分數

c = simplify(c);

return c;

}//返回簡化後的分數

ll **simplify(ll **c)

//返回最小公倍數

ll mincommonmultiple(ll n, ll m)

ll max = maxcommonfactor(n, m);

ll min = abs(n*m)/max;

return min; //返回最小公倍數

}//返回最大公因數

ll maxcommonfactor(ll n, ll m)

ll i = m%n;

while(i > 0)

return n;

}

L1 009 N個數求和 20分

本題的要求很簡單,就是求n個數字的和。麻煩的是,這些數字是以有理數分子 分母的形式給出的,你輸出的和也必須是有理數的形式。輸入格式 輸入第一行給出乙個正整數n 100 隨後一行按格式a1 b1 a2 b2 給出n個有理數。題目保證所有分子和分母都在長整型範圍內。另外,負數的符號一定出現在分子前面。輸...

L1 009 N個數求和 20分

l1 009 n個數求和 20分 本題的要求很簡單,就是求n個數字的和。麻煩的是,這些數字是以有理數分子 分母的形式給出的,你輸出的和也必須是有理數的形式。輸入格式 輸入第一行給出乙個正整數n 100 隨後一行按格式a1 b1 a2 b2 給出n個有理數。題目保證所有分子和分母都在長整型範圍內。另外...

L1 009 N個數求和 20分

本題的要求很簡單,就是求n個數字的和。麻煩的是,這些數字是以有理數分子 分母的形式給出的,你輸出的和也必須是有理數的形式。輸入格式 輸入第一行給出乙個正整數n 100 隨後一行按格式a1 b1 a2 b2 給出n個有理數。題目保證所有分子和分母都在長整型範圍內。另外,負數的符號一定出現在分子前面。輸...