回 帖 发 新 帖 刷新版面

主题:一个求n!的高精度值

program p12 ;
const m=200;
var a:array[1..m] of integer;
l,i,j,y,c,n,k,t:integer;f:real;
st1:string;
begin
write('input a number n:');
read(n);writeln;f:=0;
for i:=1 to n do
f:=f+ln(i)/ln(10);
t:=trunc(f)+1;
a[1]:=1;
l:=1;k:=1;
for i:=1 to n do
begin
   c:=0;
   while a[k]=0 do k:=k+1;
 for j:=k to 1 do
     begin
     y:=a[j]*i+c;
     c:=y div 1000;
     a[j]:=y mod 1000
     end;
    if c>0 then begin
    l:=l+1;
    a[l]:=c;
    end
 end;
 write(n,'!=');
 for i:=l downto 1 do
 begin
 if i=1 then write(a[i])
    else begin
         str(a[i],st1);
         while length(st1)<3 do st1:='0'+st1;
         write(st1);
         end;
 end;
 writeln;
 end.

以上是完整的程序代码(摘自吴再陵版的《全国青少年信息学奥林匹克联赛》)但是运行完后,只能计算小于7的阶乘,若大于7的数,显示的结果就出错了

回复列表 (共5个回复)

沙发

建议一位一位的算,不要几位塞到一个数据里

板凳


但是书上说是为了节省空间,一个数组元素存放4位数

3 楼

9999*9999=99980001>maxint
会造成范围超出

建议一个数组元素存放2位数

4 楼


同意3楼的建议,谢谢,真得存在这样的问题

5 楼

[quote]9999*9999=99980001>maxint
会造成范围超出

建议一个数组元素存放2位数[/quote]
[em3][em2][em1][em2][em1]
[fly]hntyhjnfgbnjryu[/fly]
[flash]http://[/flash][em1][em10][em20][em29][em17][em26][em25][em15][em13][em22][em41][em41][em41][em55][em61][em61]

我来回复

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