编程的高手帮忙看看NOIP普及组第二题 我的做法错在哪里
答案:2 悬赏:30 手机版
解决时间 2021-05-10 10:23
- 提问者网友:战魂
- 2021-05-10 04:32
用高精度计算出S=1!+2!+3!+…+n!(n≤50)其中“!”表示阶乘,例如:5!=5*4*3*2*1。输入正整数N,输出计算结果S。
program lqz;
var
a,b:array[1..1000] of integer;
l1,j1,n:longint;
procedure gaojia(n:longint);
var
i,j,k,l:longint;
begin
for i:=1 to l1 do
begin
a[i]:=a[i]*n;
a[i+1]:=a[i+1]+(a[i] div 10);
a[i]:=a[i] mod 10;
end;
if a[l1+1]<>0 then
l1:=l1+1;
for i:=1 to l1 do
begin
b[i]:=b[i]+a[i];
if b[i]>=10 then
begin
b[i+1]:=b[i+1]+1;
b[i]:=b[i]-10;
end;
end;
end;
begin
readln(n);
l1:=1;
a[1]:=1;
for j1:=2 to 1000 do
a[j1]:=0;
for j1:=2 to n do
gaojia(j1);
for j1:=l1 downto 1 do
write(b[j1]);
writeln;
end.
最佳答案
- 五星知识达人网友:第幾種人
- 2021-05-10 05:47
or i:=1 to l1 do
begin
b[i]:=b[i]+a[i];
if b[i]>=10 then
begin
b[i+1]:=b[i+1]+1;
b[i]:=b[i]-10;
end;
end;错了,对于数字b它的最高非0位可能根据数组a得来的l1高。你这个程序写的很不规范,建议先去好好练习一下模块化程序的编写。
begin
b[i]:=b[i]+a[i];
if b[i]>=10 then
begin
b[i+1]:=b[i+1]+1;
b[i]:=b[i]-10;
end;
end;错了,对于数字b它的最高非0位可能根据数组a得来的l1高。你这个程序写的很不规范,建议先去好好练习一下模块化程序的编写。
全部回答
- 1楼网友:白昼之月
- 2021-05-10 06:36
天啊!!
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯