7-79 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>
int gcd(int m,int n)
{
int r;
r=m%n;
while(r!=0)
{
m=n;
n=r;
r=m%n;
}
return n;
}
int main()
{
int count;
int m,n,a,b;
int g;
int zheng;
scanf("%d",&count);
int i;
int gongbei;
scanf("%d/%d",&m,&n);
g=gcd(m,n);
m/=g;
n/=g;
for(i=2;i<=count;i++)
{
scanf("%d/%d",&a,&b);
g=gcd(a,b);
a/=g;
b/=g;
g=gcd(n,b);
gongbei=n*b/g;
m=gongbei/n*m+gongbei/b*a;
n=gongbei;
g=gcd(m,n);
m/=g;
n/=g;
}
int gcd(int m,int n)
{
int r;
r=m%n;
while(r!=0)
{
m=n;
n=r;
r=m%n;
}
return n;
}
int main()
{
int count;
int m,n,a,b;
int g;
int zheng;
scanf("%d",&count);
int i;
int gongbei;
scanf("%d/%d",&m,&n);
g=gcd(m,n);
m/=g;
n/=g;
for(i=2;i<=count;i++)
{
scanf("%d/%d",&a,&b);
g=gcd(a,b);
a/=g;
b/=g;
g=gcd(n,b);
gongbei=n*b/g;
m=gongbei/n*m+gongbei/b*a;
n=gongbei;
g=gcd(m,n);
m/=g;
n/=g;
}
zheng=m/n;
m=m-zheng*n;
if(zheng==0&&m!=0)
printf("%d/%d\n",m,n);
else
if(m==0)
printf("%d\n",zheng);
else
printf("%d %d/%d\n",zheng,m,n);
return 0;
}
m=m-zheng*n;
if(zheng==0&&m!=0)
printf("%d/%d\n",m,n);
else
if(m==0)
printf("%d\n",zheng);
else
printf("%d %d/%d\n",zheng,m,n);
return 0;
}