1. 程式人生 > >L1-009 N個數求和

L1-009 N個數求和

一行 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個數求和