Data update
This commit is contained in:
parent
8e4e15fa56
commit
72eb4943cb
1853 changed files with 35514 additions and 9441 deletions
|
|
@ -0,0 +1,56 @@
|
|||
function longmulti(a, b: string): string;
|
||||
begin
|
||||
var i := 0;
|
||||
var j := 0;
|
||||
var k := false;
|
||||
|
||||
// either is zero, return "0"
|
||||
if (a = '0') or (b = '0') then
|
||||
begin
|
||||
result := '0';
|
||||
exit;
|
||||
end;
|
||||
|
||||
// see if either a or b is negative
|
||||
if a[1] = '-' then
|
||||
begin
|
||||
i := 2;
|
||||
k := not k;
|
||||
end;
|
||||
if b[1] = '-' then
|
||||
begin
|
||||
j := 2;
|
||||
k := not k;
|
||||
end;
|
||||
|
||||
// if yes, prepend minus sign if needed and skip the sign
|
||||
if (i > 1) or (j > 1) then
|
||||
begin
|
||||
result := if k then '-' else '';
|
||||
result += longmulti(a[i:a.Length + 1], b[j:b.Length + 1]);
|
||||
exit;
|
||||
end;
|
||||
|
||||
result := '0' * (a.length + b.length);
|
||||
|
||||
for var ii := a.length downto 1 do
|
||||
begin
|
||||
var carry := 0;
|
||||
var kk := ii + b.length;
|
||||
for var jj := b.length downto 1 do
|
||||
begin
|
||||
var n := a[ii].todigit * b[jj].todigit + result[kk].todigit + carry;
|
||||
carry := n div 10;
|
||||
result[kk] := chr(n mod 10 + ord('0'));
|
||||
dec(kk);
|
||||
end;
|
||||
result[kk] := chr(ord(result[kk]) + carry);
|
||||
end;
|
||||
|
||||
if result[1] = '0' then
|
||||
result[1:result.length] := result[2:result.length + 1];
|
||||
end;
|
||||
|
||||
begin
|
||||
longmulti('-18446744073709551616', '-18446744073709551616').println;
|
||||
end.
|
||||
Loading…
Add table
Add a link
Reference in a new issue