洛谷P009 阶乘之和

阶乘之和

题目描述

用高精度计算出S=1!+2!+3!+…+n!(n≤50)

其中“!”表示阶乘,例如:5!=5*4*3*2*1。

代码

const
  maxn=100;
var
  a,b:array[0..maxn] of longint;
  i,n:longint;


procedure mul(x:longint);
var
  i,g,s:longint;
begin
  g:=0;
  for i:=maxn downto 1 do
    begin
      s:=a[i]*x+g;
      g:=s div 10;
      a[i]:=s mod 10;
    end;
end;


procedure add;
var
  i,g,s:longint;
begin
  g:=0;
  for i:=maxn downto 1 do
    begin
      s:=a[i]+b[i]+g;
      g:=s div 10;
      b[i]:=s mod 10;
    end;
end;


procedure print;
var
  i,j:longint;
begin
  j:=1;
  while a[j]=0 do inc(j);
  for i:=j to maxn do
    write(b[i]);
end;


begin
  readln(n);
  a[maxn]:=1;
  for i:=1 to n do
    begin
      mul(i);
      add;
    end;
  print;
end.


你可能感兴趣的:(高精度)