pascal 分式求和 (fssum)分式求和 (fssum)【问题描述】给出形如直角三角形图形,下面的是n=4行的**********现在请你求出各行“*”的个数倒数之和.例如上面的是1/1+1/2+1/3+1/4=2 1/12【输入格式】输入文
来源:学生作业帮助网 编辑:作业帮 时间:2024/11/17 21:37:11
pascal 分式求和 (fssum)分式求和 (fssum)【问题描述】给出形如直角三角形图形,下面的是n=4行的**********现在请你求出各行“*”的个数倒数之和.例如上面的是1/1+1/2+1/3+1/4=2 1/12【输入格式】输入文
pascal 分式求和 (fssum)
分式求和
(fssum)
【问题描述】
给出形如直角三角形图形,下面的是n=4行的
*
**
***
****
现在请你求出各行“*”的个数倒数之和.
例如上面的是1/1+1/2+1/3+1/4=2 1/12
【输入格式】
输入文件fssum.in的包含一个正整数N,表示图形的行数.
【输出文件】
输出文件fssum.out是一个结果,表示倒数之和的分数最简形式.
【样例输入】
4
【样例输出】
2 1/12
【数据规模与约定】
对于20%的数据,有N≤10;
对于100%的数据,有N≤40.
pascal 分式求和 (fssum)分式求和 (fssum)【问题描述】给出形如直角三角形图形,下面的是n=4行的**********现在请你求出各行“*”的个数倒数之和.例如上面的是1/1+1/2+1/3+1/4=2 1/12【输入格式】输入文
为避免分子分母过大,超出32位整数范围,分数只能两个两个的加,并对每次的累加结果进行约分化简,尽量减小分子分母的数值.这种方法可以算出N=40时的结果为3 11844997/233901280.程序如下.
program fssum;
function GCD(a, b: Longint): Longint;
var
c: Longint;
begin
if a < b then
begin
c := a;
a := b;
b := c;
end;
while b 0 do
begin
c := a mod b;
a := b;
b := c;
end;
GCD := a;
end;
var
n, a, b, c, hcf, lcm, i: Longint;
begin
Assign(Input, 'fssum.in');
Reset(Input);
Readln(n);
Close(Input);
if n c then
begin
Inc(a, b div c);
b := b mod c;
end;
hcf := GCD(b, c);
b := b div hcf;
c := c div hcf;
end;
if b = c then
begin
Inc(a);
b := 0;
end;
Assign(Output, 'fssum.out');
Rewrite(Output);
Write(a);
if b 0 then Write(' ', b, '/', c);
Close(Output);end.