Advertisement
Guest User

Untitled

a guest
Jan 20th, 2019
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.53 KB | None | 0 0
  1. program project1;
  2.  
  3. uses sysutils;
  4.  
  5. const
  6. BASE = 1000000000;
  7. type
  8. TLongNumber = record
  9. dig: array of qword;
  10. end;
  11.  
  12. var aLong,bLong:TLongNumber;
  13. number2,number1:Ansistring;
  14. fin,fout:textfile;
  15.  
  16. function MultLongLong(lhs,rhs:TLongNumber):TLongNumber;
  17. var remain:qword;
  18. i,j:dword;
  19. begin
  20. SetLength(result.dig,length(lhs.dig) + length(rhs.dig));
  21. for i := 0 to length(lhs.dig)-1 do
  22. begin
  23. remain := 0;
  24. for j := 0 to length(rhs.dig)-1 do
  25. begin
  26. remain := remain + lhs.dig[i] * rhs.dig[j] + Result.dig[i+j];
  27. Result.dig[i+j] := remain mod BASE;
  28. remain := remain div BASE;
  29. end;
  30. if remain > 0 then
  31. Result.dig[i + length(rhs.dig)] += remain;
  32. end;
  33.  
  34. end;
  35.  
  36. function toString(val: TLongNumber): Ansistring;
  37. var i:dword;
  38. divBASE:qword;
  39. IsZero:boolean;
  40. begin
  41. isZero := true;
  42. result := '';
  43. for i:=(length(val.dig) - 1) downto 0 do
  44. begin
  45. divBASE:=100000000;
  46. if (val.dig[i] = 0) and (isZero) and (i<>0) then
  47. continue
  48. else
  49. begin
  50. if (not(isZero)) then
  51. begin
  52. while ((val.dig[i] div divBASE = 0) and (divBase <> 1)) do
  53. begin
  54. result += '0';
  55. divBase := divBase div 10;
  56. end;
  57. end;
  58. result += inttostr(val.dig[i]);
  59. isZero := false;
  60. end;
  61. end;
  62. end;
  63.  
  64. function fromString(const str: AnsiString): TLongNumber;
  65. var j,i,offset:qword;
  66. TimedStr:string;
  67. begin
  68. TimedStr := '';
  69. offset := 0;
  70. if (length(str) mod 9 <> 0) then
  71. offset := 1;
  72. j := 0;
  73. SetLength(result.dig,(length(str) div 9) + offset);
  74. for i := length(str) downto 1 do
  75. begin
  76. if str[i] <> ' ' then
  77. begin
  78. if length(TimedStr) = 9 then
  79. begin
  80. result.dig[j] := strtoint(TimedStr);
  81. j += 1;
  82. timedStr := '';
  83. end;
  84. timedStr := str[i]+timedStr;
  85. end;
  86. end;
  87. if TimedStr <> '' then result.dig[j] := strtoint(TimedStr);
  88. end;
  89.  
  90. begin
  91. assignfile(fin,'input.txt');
  92. assignfile(fout,'output.txt');
  93. Reset(fin);
  94. Rewrite(fout);
  95. readln(number1);
  96. readln(number2);
  97. writeln(toString(MultLongLong(FromString(number1),FromString(number2))));
  98. close(fin);
  99. close(fout);
  100. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement