求助。。一道关于高精度乘法的程序题(pascal)

求n!的精确值输入只有一行n输出n!的精确值数据规模1<=n=>10^18各位拜托啦。。。话说,编程蛮辛苦的,我把悬赏改成30了。。。。... 求n!的精确值
输入
只有一行n
输出
n!的精确值
数据规模
1<=n=>10^18

各位拜托啦。。。
话说,编程蛮辛苦的,我把悬赏改成30了。。。。
展开
 我来答
ice_chain
2009-08-18 · TA获得超过509个赞
知道小有建树答主
回答量:288
采纳率:0%
帮助的人:168万
展开全部
program y1_1;
const
z=10000;
var
a:array[0..z+1]of integer;
n,j,i,k:longint;
begin
readln(n);
begin
a[1]:=1;
for i:=1 to n do
begin
for j:=1 to z do
a[j]:=a[j]*i;
for k:=1 to z do
begin
a[k+1]:=a[k+1]+a[k]div 10;
a[k]:=a[k]mod 10;
end;
end;
i:=z;k:=0;
repeat
if a[i]<>0 then k:=1;
i:=i-1;
until k=1;
k:=0;
for j:=i+1 downto 1 do
write(a[j]);
end;
writeln;
end.
小佑0_0糖
2009-08-18 · TA获得超过673个赞
知道答主
回答量:44
采纳率:0%
帮助的人:0
展开全部
没必要那么麻烦
我简要的敲一下
k:=1; a[k]:=1;
for i:=2 to n do
begin
x:=0;
for j:=1 to k do
begin
x:=x+a[j]*i;
a[j]:=x mod 10;
x:=x div 10;
while x> 0 then
begin k:=k+1; a[k]:=x mod 10;x:=x div 10;end;
end;
end;
如果觉得我的答案还可以就请采纳吧
版权归小佑0_0糖所有,盗用者④
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lixueting1124
2009-08-19
知道答主
回答量:17
采纳率:0%
帮助的人:22.7万
展开全部
这是高精度乘高精度:
const n=12800;
type t=array[1..n]of 0..9;
var a,b,c,d,e:t;
l1,l2,i,j,k,s,p:longint;
s1,s2:string;
f:text;
time,t1,t2:real;

procedure cheng(var a,b:t;l1,l2:longint);
var z:longint;
begin
for j:=1 to l2 do
begin
k:=0;
for i:=1 to l1 do
begin
z:=(a[i]*b[j]+k)mod 10;
k:=(a[i]*b[j]+k)div 10;
c[i+j-1]:=c[i+j-1]+z;
if c[i+j-1]>=10 then begin
k:=k+c[i+j-1] div 10;
c[i+j-1]:=c[i+j-1]mod 10;
end;
end;
c[l1+j]:=c[l1+j]+k;
end;
end;

下面是单精度乘以高精度:
var m:string;
n,i,k,j,b,c,d:integer;
a:array[1..500]of integer;
begin
readln(m);
readln(n);
for i:=length(m) downto 1 do
begin
b:=ord(m[i])-48;
a[i]:=(b*n+j) mod 10;
j:=(n*b+j) div 10;
c:=c+1;
end;
if j>0 then write(j);
for i:=1 to c do write(a[i]);

end.
我把主要的精度计算给你了,其他的么自己编了~~改改就好了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zyh617517224
2009-08-26 · TA获得超过1549个赞
知道小有建树答主
回答量:654
采纳率:0%
帮助的人:809万
展开全部
var n,w,i:longint;
a:packed array[1..100000]of longint;
procedure jc(k:longint);
var x,i:longint;
begin
x:=0;
for i:=1 to w do
begin
a[i]:=a[i]*k+x;
x:=a[i] div 10;
a[i]:=a[i] mod 10;
end;
while x>0 do
begin
w:=w+1;
a[w]:=x mod 10;
x:=x div 10;
end;
end;
begin
read(n);
a[1]:=1;
w:=1;
for i:=1 to n do jc(i);
for i:=w downto 1 do write(a[i]);
end.
如果用高精度的话,10^18的数据规模肯定会超时,需要优化。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友bec7aac0b
2009-08-18 · 超过12用户采纳过TA的回答
知道答主
回答量:53
采纳率:0%
帮助的人:0
展开全部
ice_chain的难以在1s内出解
可以将1..n分解质因数,求出各质因数的个数,然后用二分快速幂
n的范围较大,要用int64
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
hello_qqsg
2009-08-27
知道答主
回答量:78
采纳率:0%
帮助的人:0
展开全部
网上有很多的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式