回 帖 发 新 帖 刷新版面

主题:[求助]一道简单的题

求n的阶层(n<100)
例:
5!=5×4×3×2×1
谢谢啦!

回复列表 (共25个回复)

沙发

var
  s,i,n:longint;
begin 
  readln(n);s:=1;
  for i:=2 to n do s:=s*i;
  writeln(s);
end.

板凳

建议用高精度

3 楼

何谓“高精度”?

4 楼

bigchen超时是肯定的!

5 楼

同意angwuy

6 楼

var 
    n,i,j:longint;
begin
  readln(n);
  j:=1;
  for i:=1 to n do
    begin
     j:=j*i;
    end;
  write(j);   
end.

7 楼

var 
    n,i,j:longint;
begin
  readln(n);
  j:=1;
  for i:=1 to n do
    begin
     j:=j*i;
    end;
  write(j);   
end.

8 楼

所谓的 高精度 就是不使用系统自带的integer,long等整型
自己使用数组来模拟一个数据类型
这样可以使数据的长度很夸张
像题目中的100的阶乘,可以用个20,30位的数组来模拟
关键就是自己需要对数组的乘法进行特殊编程

9 楼

[quote]何谓“高精度”?[/quote]


教材上有,可以自己翻翻。

10 楼

var a,i,j,p,l,w,s:integer;b,c,q:string;
n,h,k:array[1..10000] of integer;
begin
  readln(a);
  b:='1';
  for i:=2 to a do
    begin
    str(i,c);
    for j:=1 to length(c) do q:=copy(c,j,1);val(q,h[j],p);
    for j:=1 to length(b) do q:=copy(b,j,1);val(q,k[j],p);
    for j:=1 to length(c) do
      begin
      for l:=1 to length(b) do
        begin
        w:=j+l-1;s:=h[j]*k[l];
        n[w]:=n[w]+(s mod 10);
        n[w+1]:=n[w+1]+(s div 10)+(n[w] div 10);
        n[w]:=n[w] mod 10;
        end;
      end;b:='';
      if n[w+1]>0 then w:=w+1;
    for j:=w downto 1 do str(n[j],q);b:=b+q;n[j]:=0;h[j]:=0;k[j]:=0;
  end;
  writeln(b);
end.

我来回复

您尚未登录,请登录后再回复。点此登录或注册