pascal用高精度方法求s=1+2+3+……+n的精确值
答案:3 悬赏:10
解决时间 2021-04-28 12:10
- 提问者网友:刀枪不入
- 2021-04-27 13:55
pascal用高精度方法求s=1+2+3+……+n的精确值
最佳答案
- 二级知识专家网友:冷态度
- 2021-04-27 15:06
二楼的
难道你准备一个一个从1加到n?
楼主
用公式s=n*(n+1)
一个高精度乘法就OK了
难道你准备一个一个从1加到n?
楼主
用公式s=n*(n+1)
一个高精度乘法就OK了
全部回答
- 1楼网友:为你轻狂半世殇
- 2021-04-27 17:31
不知道,你想要多高?
你要100位,肯定要数组
- 2楼网友:滚刀废物浮浪人
- 2021-04-27 16:11
program add;
var
i,j,k,t,n:longint;
a,b:array[1..100] of longint;
s1,s2,sum,tmp,temp:string;
procedure doit;{过程:高精度加法}
begin
for i:=1 to length(s1) do
a[length(s1)-i+1]:=ord(s1[i])-48;
for j:=1 to length(s2) do
b[length(s2)-j+1]:=ord(s2[j])-48;
if length(s1)<length(s2) then
k:=length(s2)
else
k:=length(s1);
for i:=1 to k do
begin
a[i]:=a[i]+b[i];
a[i+1]:=a[i+1]+a[i] div 10;
a[i]:=a[i] mod 10;
end;
if a[k+1]<>0 then k:=k+1;
for i:=k downto 1 do
begin
temp:='';
str(a[i],temp);
tmp:=tmp+temp;
sum:=tmp;
end;
end;
{过程结束,主要思想是用字符串读入数据,用数组保存数据、计算}
begin
assign(input,'add.in');reset(input);
assign(output,'add.out');rewrite(output);{开启输入输出文件系统,输入文件为add.in,输出文件为add.out}
readln(n);{读入n的值}
s1:='1';sum:='';{初始化}
for t:=2 to n do{循环,将累加的值作为s1,与s2相加}
begin
str(t,s2);
doit;{过程:求和}
s1:=sum;
tmp:='';
end;
writeln(sum);{输出总和的值}
close(input);
close(output);{关闭输入输出系统}{结束}
end.
累死了,终于over了,高精度求和。这个是文件输入的,在add.in中输入n的值,在add.out输出和,这个是纯加法。还可以用高斯求和公式来算即s=n*(n+1)/2,太长了,写不下-_-
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息!
大家都在看
推荐信息