pascal用高精度方法求s=1+2+3+……+n的精确值
展开全部
type arr=array[1..500]of longint;
var a,b:arr;
i,n,w1,w,j:longint;
procedure jia;
var c:arr;
w2,i:longint;
begin
w2:=w;
fillchar(c,sizeof(c),0);
for i:=1 to w2 do begin
c[i]:=c[i]+a[i]+b[i];
c[i+1]:=c[i+1]+c[i] div 10;
c[i]:=c[i] mod 10;
end;
if c[w2+1]>0 then inc(w2);
a:=c;
w:=w2;
end;
begin
readln(n);
w:=1;
for i:=1 to n do begin
fillchar(b,sizeof(b),0);
j:=i;
w1:=0;
while j>0 do begin
inc(w1);
b[w1]:=j mod 10;
j:=j div 10;
end;
jia;
end;
for i:=w downto 1 do write(a[i]);
end.
或者
var n,m,i,j,w1,w2,w3:longint;
a,b,c:array[1..500]of longint;
begin
readln(n);
m:=n+1;
if n mod 2=0 then n:=n div 2
else m:=m div 2;
while n>0 do begin
inc(w1);
a[w1]:=n mod 10;
n:=n div 10;
end;
while m>0 do begin
inc(w2);
b[w2]:=m mod 10;
m:=m div 10;
end;
for i:=1 to w1 do
for j:=1 to w2 do begin
c[i+j-1]:=a[i]*b[j]+c[i+j-1];
c[i+j]:=c[i+j]+c[i+j-1] div 10;
c[i+j-1]:=c[i+j-1] mod 10;
end;
w3:=w1+w2;
while (c[w3]=0)and(w3>1) do dec(w3);
for i:=w3 downto 1 do write(c[i]);
end.
第二个比较快
var a,b:arr;
i,n,w1,w,j:longint;
procedure jia;
var c:arr;
w2,i:longint;
begin
w2:=w;
fillchar(c,sizeof(c),0);
for i:=1 to w2 do begin
c[i]:=c[i]+a[i]+b[i];
c[i+1]:=c[i+1]+c[i] div 10;
c[i]:=c[i] mod 10;
end;
if c[w2+1]>0 then inc(w2);
a:=c;
w:=w2;
end;
begin
readln(n);
w:=1;
for i:=1 to n do begin
fillchar(b,sizeof(b),0);
j:=i;
w1:=0;
while j>0 do begin
inc(w1);
b[w1]:=j mod 10;
j:=j div 10;
end;
jia;
end;
for i:=w downto 1 do write(a[i]);
end.
或者
var n,m,i,j,w1,w2,w3:longint;
a,b,c:array[1..500]of longint;
begin
readln(n);
m:=n+1;
if n mod 2=0 then n:=n div 2
else m:=m div 2;
while n>0 do begin
inc(w1);
a[w1]:=n mod 10;
n:=n div 10;
end;
while m>0 do begin
inc(w2);
b[w2]:=m mod 10;
m:=m div 10;
end;
for i:=1 to w1 do
for j:=1 to w2 do begin
c[i+j-1]:=a[i]*b[j]+c[i+j-1];
c[i+j]:=c[i+j]+c[i+j-1] div 10;
c[i+j-1]:=c[i+j-1] mod 10;
end;
w3:=w1+w2;
while (c[w3]=0)and(w3>1) do dec(w3);
for i:=w3 downto 1 do write(c[i]);
end.
第二个比较快
展开全部
var s,n:integer(或者longint,看你);
begin
readln(n);
s:=1+2+3+...+n;
wirteln(s);
end.
或者那段话不需要写,给你个参考
begin
readln(n);
s:=1+2+3+...+n;
wirteln(s);
end.
或者那段话不需要写,给你个参考
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
var
s,n:longint;
begin
read(n);
s:=(1+n)*n/2
writeln(s);
end.
还没测试过 不过应该可以过
s,n:longint;
begin
read(n);
s:=(1+n)*n/2
writeln(s);
end.
还没测试过 不过应该可以过
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
var s,i,n:integer
begin
s:=0;
readln(n);
for i:=1 to n do s:=s+i;
end.
这个很精确,也不需要用到s:=(1+n)*n/2等公式啥的
begin
s:=0;
readln(n);
for i:=1 to n do s:=s+i;
end.
这个很精确,也不需要用到s:=(1+n)*n/2等公式啥的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
var
s,n:longint;
begin
read(n);
writeln((1+n)*n/2)
end.
s,n:longint;
begin
read(n);
writeln((1+n)*n/2)
end.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询