作业帮 > 综合 > 作业

pascal高精度计算1!+2!+…+n!求改

来源:学生作业帮 编辑:搜搜考试网作业帮 分类:综合作业 时间:2024/07/04 14:53:54
pascal高精度计算1!+2!+…+n!求改
用高精度计算出S=1!+2!+3!+...+n!(n=10 then begin h[q]:=h[q]-10;h[q+1]:=h[q+1]+1;end;
end;
end;
i:=100;
while h[i]=0 do i:=i-1;
for j:=i downto 1 do write(h[i]);
end.
--------------------------------------分割线-----------------------------------------
阶乘能算出来,相加的时候有问题,应该怎么改?
program jiecheng;
type arr=array[-5..105] of integer;
var a,h:arr;
n,i,j,k,p,q:integer;
procedure jc(var a:arr;k:integer);
var i,x,t:integer;
begin
t:=0;
for i:=1 to 100 do
begin
x:=a[i]*k+t;
t:=x div 10;
a[i]:=x mod 10;
end;
end;
begin
read(n);
fillchar(h,sizeof(h),0);
fillchar(a,sizeof(a),0);a[1]:=1;
for p:=1 to n do
begin
jc(a,p);
i:=100;
while a[i]=0 do i:=i-1;
for q:=1 to i do
begin
h[q]:=h[q]+a[q];
while h[q]>=10 do begin h[q]:=h[q]-10;h[q+1]:=h[q+1]+1;end;
{ h[q+1]:=h[q+1]+(h[q] div 10);
h[q]:=h[q] mod 10;}
end;
end;
i:=100;
while h[i]=0 do i:=i-1;
for j:=i downto 1 do write(h[i]);
end.
pascal高精度计算1!+2!+…+n!求改
if h[q]>=10 then begin h[q]:=h[q]-10;h[q+1]:=h[q+1]+1;end;
这句话改成while循环,因为不止进位一次,怎么改不用我说了吧?
祝你noip成功,年年岁岁花相似,岁岁年年人不同,又是一批人呀.(感慨一下)
再问: 改了还是不行啊= =输入5输出111输入9输出444444……这是什么情况 谢谢,你也是参加noip的吗?拿到一二等奖难不难啊?
再答: 我现在大一了,参加过2次noip,1次noi,总体来说都是悲剧往事,不提也罢,我是河北的,2等奖很简单,只要不马虎,认认真真做,模拟,搜索熟练就可以。1等奖dp肯定得熟练掌握,我觉得运气很重要,4道题对你口味,那就好办了。还有经典题型一定要熟,你这题属于高精度基础,我也没仔细看,对不住呀。
再问: 恩,我才刚学完,老师发了一堆练习= =虽然是基础题做起来还是挺困难的……
再答: 同学,我对你很无语,你最后write(h[j]),是j好吗!!!!不是i,这种错误noip犯你后悔一辈子。