我编写了代码来乘以对于 PC 来说太大而无法作为整数处理的数字。该代码在很多时候都在运行和工作,但有时会出现随机错误,例如“无效的指针位置”或“在...处访问冲突”。我想我在某处有逻辑错误,但我似乎找不到。
此外,当我注释掉一些代码来测试问题时,我的一些仅包含数字的字符串已转换为 o
和似乎是普通话符号的组合。我也会包括代码,供感兴趣的人使用。
function TForm3.MuiltStr(x,y: String): String;
var
XArr: Array of Integer; //array van chars van x se syfers
AnsArr: Array of String; //array van proses se nommers
transStr: String;
I,A: Integer;
proc: String;
ansStr: String;
zeroes: String;
begin
Setlength(XArr,x.Length);
Setlength(AnsArr,x.Length);
for I := 1 to Length(XArr) do
begin
XArr[I] := 0;
AnsArr[I] := '0';
end;
for I := 1 to x.Length do
begin
XArr[I] := StrToInt(x[I]);
end;
for I := Length(XArr) downto 1 do
begin
zeroes := '';
for A := y.Length downto 1 do
begin
if A < y.Length then zeroes := zeroes + '0';
proc := IntToStr(StrToInt(y[A]) * XArr[I]) + zeroes;
ansArr[I] := StrPlus(ansArr[I],proc);
end;
end;
for I := 1 to Length(AnsArr) do Memo1.Lines.Add(ansArr[I]);
if x.length >= 2 then
begin
for I := Length(AnsArr) downto 2 do
begin
if AnsArr[I].length > 1 then
begin
Memo1.Lines.Add('//');
TransStr := Copy(AnsArr[I],1,AnsArr[I].length - 1);
AnsArr[I] := Copy(AnsArr[I],AnsArr[I].length,1);
AnsArr[I - 1] := StrPlus(AnsArr[I - 1],TransStr);
end;
AnsStr := AnsArr[I] + AnsStr;
if I = 2 then AnsStr := AnsArr[1] + AnsStr;
end;
for I := 1 to Length(AnsArr) do
begin
Memo1.Lines.Add(AnsArr[I]);
end;
end
else
begin
AnsStr := AnsArr[1];
end;
Result := 'Hier' + AnsStr;
Delete(XArr,Length(XArr));
Delete(AnsArr,Length(AnsArr));
end;
下面是更糟糕的代码:
function TForm3.MuiltStr(x,y: String): String;
var
XArr: Array of Integer;
AnsArr: Array of String;
transStr: String;
I,x.Length);
{for I := 1 to Length(XArr) do
begin
XArr[I] := 0;
AnsArr[I] := '0';
end;
for I := 1 to x.Length do
begin
XArr[I] := StrToInt(x[I]);
end;
for I := Length(XArr) downto 1 do
begin
zeroes := '';
for A := y.Length downto 1 do
begin
if A < y.Length then zeroes := zeroes + '0';
proc := IntToStr(StrToInt(y[A]) * XArr[I]) + zeroes;
ansArr[I] := StrPlus(ansArr[I],TransStr);
end;
AnsStr := AnsArr[I] + AnsStr;
if I = 2 then AnsStr := AnsArr[1] + AnsStr;;
end;
for I := 1 to Length(AnsArr) do
begin
Memo1.Lines.Add(AnsArr[I]);
end;
end
else}
begin
AnsStr := AnsArr[1];
end;
Result := 'Answer: ' + AnsStr;
Delete(XArr,Length(AnsArr));
end;
为了奇怪的结果,我使用 X=1
和 Y=2
运行此程序。
我的 StrPlus
函数没有错误。它只是将两个字符串数字相加。