L1-009 N個數求和
阿新 • • 發佈:2019-02-20
一行 turn main -h pro scan 範圍 ng- amp L1-009 N個數求和 (20 分)
本題的要求很簡單,就是求N
個數字的和。麻煩的是,這些數字是以有理數分子/分母
的形式給出的,你輸出的和也必須是有理數的形式。
輸入格式:
輸入第一行給出一個正整數N
(≤100)。隨後一行按格式a1/b1 a2/b2 ...
給出N
個有理數。題目保證所有分子和分母都在長整型範圍內。另外,負數的符號一定出現在分子前面。
輸出格式:
輸出上述數字和的最簡形式 —— 即將結果寫成整數部分 分數部分
,其中分數部分寫成分子/分母
,要求分子小於分母,且它們沒有公因子。如果結果的整數部分為0,則只輸出分數部分。
輸入樣例1:
5
2/5 4/15 1/30 -2/60 8/3
輸出樣例1:
3 1/3
輸入樣例2:
2
4/3 2/3
輸出樣例2:
2
輸入樣例3:
3
1/3 -1/6 1/8
輸出樣例3:
7/24
#include <stdio.h> long long gcd(long long a,long long b){ if(a == 0) return 0; else return (b == 0) ? a : gcd(b, a % b); } int main(){ int N; long long lcp; long long a,b,c,d; int i = 1; scanf("%d",&N); scanf("%lld/%lld",&a,&b); int t0 = gcd(a,b); if(a){ a /= t0; b /= t0; } while(i < N){ scanf("%lld/%lld",&c,&d); lcp = b / gcd(b,d) * d; a = a * lcp / b + c * lcp / d; b = lcp; int t0 = gcd(a,b); if(t0 != 0){ a = a / t0; b = b / t0; } i++; } if(a && a/b == 0)/// 整數部分為0 且 a不為 0 printf("%lld/%lld\n",a%b,b); else if(a%b == 0)/// 小數部分為0 printf("%lld\n",a/b); else printf("%lld %lld/%lld\n",a/b,a%b,b); return 0; }
L1-009 N個數求和