Free Pascal中的平方和运算这个程序中当j加到四万多时就爆掉了,为什么,他不是longint 吗varn,nn:qword;s:array[1..255] of integer;lens:integer;j:longint;procedure jia(nn:longint);var strnn:string; lennn:integer; nnar:array[1..2

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/14 13:33:52
Free Pascal中的平方和运算这个程序中当j加到四万多时就爆掉了,为什么,他不是longint 吗varn,nn:qword;s:array[1..255] of integer;lens:integer;j:longint;procedure jia(nn:longint);var strnn:string; lennn:integer; nnar:array[1..2

Free Pascal中的平方和运算这个程序中当j加到四万多时就爆掉了,为什么,他不是longint 吗varn,nn:qword;s:array[1..255] of integer;lens:integer;j:longint;procedure jia(nn:longint);var strnn:string; lennn:integer; nnar:array[1..2
Free Pascal中的平方和运算
这个程序中当j加到四万多时就爆掉了,为什么,他不是longint 吗varn,nn:qword;s:array[1..255] of integer;lens:integer;j:longint;procedure jia(nn:longint);var strnn:string; lennn:integer; nnar:array[1..255] of integer; x:longint; i:integer; max:integer;begin max:=0; lens:=255; while (s[lens]=0) and (lens>1) do lens:=lens-1; str(nn,strnn); lennn:=length(strnn); for i:=1 to lennn do nnar[i]:=ord(strnn[lennn-i+1])-ord('0'); if lennn>lens then max:=lennn else max:=lens; x:=0; for i:=1 to max do begin s[i]:=s[i]+x+nnar[i]; x:=s[i] div 10; s[i]:=s[i] mod 10; end; s[i+1]:=x; for i:=1 to 255 do nnar[i]:=0;end;begin read(n); for j:=1 to n do begin nn:=j*j; jia(nn); write(j,' '); end; lens:=255; while s[lens]=0 do lens:=lens-1; for j:=lens downto 1 do write(s[j]);end.

Free Pascal中的平方和运算这个程序中当j加到四万多时就爆掉了,为什么,他不是longint 吗varn,nn:qword;s:array[1..255] of integer;lens:integer;j:longint;procedure jia(nn:longint);var strnn:string; lennn:integer; nnar:array[1..2
46341的平方就超过了longint
nn:=j*j默认是在longint的范围内计算,所以会暴
写成nn:=int64(j)*j吧