pascal 分数相加

来源:百度知道 编辑:UC知道 时间:2024/06/17 09:19:16
有N(1〈=N〈=4)个分数,求这N个分数的和。
输入:第一行,N表示分数的个数,后面有N行给出N个分数,每个分数给出形式为X/Y(0〈=X〈=300,1〈=Y〈=300)
输出:一行,分数的和(其结果必须为最简分数:如果分母为一,输出为整数;不考虑分子与分母的大小问题)
如输入:
2
1/2
2/3
输出:
7/6

program t3;
var
n,i,j,tp:integer;
s:string;
a,b:array[1..100] of integer;
sum1,sum2,gy,gb:longint;

function gcd(z1:integer;z2:integer):integer;
begin
if z2=0 then
gcd:=z1
else
gcd:=gcd(z2,z1 mod z2);
end;

function acm(z1:integer;z2:integer):integer;
begin
acm:=z1*z2 div gcd(z1,z2);
end;

begin
readln(n);
for i:=1 to n do
begin
readln(s);
j:=pos('/',s);
val(copy(s,1,j-1),a[i],tp);
val(copy(s,j+1,length(s)),b[i],tp);
end;
gb:=1;
gy:=1;
sum1:=0;
sum2:=0;
for i:=1 to n do
gb:=acm(gb,b[i]);
for i:=1 to n do
begin
tp:=gb div b[i];
sum1:=sum1+a[i]*tp;
end;
tp:=gcd(sum1,gb);
sum1:=sum1 div tp;
sum2:=gb div tp;
writeln(sum1,'/',sum2);
readln;
end.