因为 s = s + 1 / n
n是 int 整型变量
1 / n 是整数除法,当然不对了
将 1 改为浮点数
s = s + 1.0f / n
这需要用到高精度乘法和加法。以下是Pascal语言实现的代码:
type
ta=record
c:array[1..100]of integer
l:integer
end
var
s:array[1..50]of ta
i,n,j:integer
begin
readln(n)
s[1].c[1]:=1
s[1].l:=1
for i:=2 to n do
begin
for j:=1 to s[i-1].l do
s[i].c[j]:=s[i-1].c[j]*i
j:=1
while (s[i].c[j]>0)or(j<=s[i-1].l) do
begin
if s[i].c[j]>=10 then
begin
inc(s[i].c[j+1],s[i].c[j] div 10)
s[i].c[j]:=s[i].c[j] mod 10
end
inc(j)
end
dec(j)
s[i].l:=j
end
for i:=2 to n do
begin
for j:=1 to s[i-1].l do
begin
inc(s[i].c[j],s[i-1].c[j])
if s[i].c[j]>=10 then
begin
inc(s[i].c[j+1])
s[i].c[j]:=s[i].c[j] mod 10
end
end
if s[i].c[s[i].l+1]>0 then inc(s[i].l)
end
for i:=s[n].l downto 1 do
write(s[n].c[i])
writeln
readln()
end.
样例输入:
10
样例输出:
4037913
如有错误,请多原谅。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)