Advertisement
regergr

Untitled

Dec 1st, 2018
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.75 KB | None | 0 0
  1. implementation
  2. const
  3. alph36 = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
  4. function CharToLongNumber(val: char; base: TBase): TLongNumber;
  5. var num: int64;
  6. begin
  7. num := Pos(val, alph36);
  8. if (num > 0) and (num-1 < base) then begin
  9. Result := num-1;
  10. end
  11. else
  12. raise Exception.Create('Invalid char ''' + val + '''');
  13.  
  14. end;
  15. function Invers(Res: TLongNumber): TLongNumber;
  16. var
  17. arr: TLongNumber;
  18. i: integer;
  19. begin
  20. SetLength(arr.dig, high(res.dig)+1);
  21. for i := 0 to high(res.dig) do begin
  22. arr.dig[high(arr.dig)-i] := res.dig[i];
  23. end;
  24. arr.inv := res.inv;
  25. Result := arr;
  26. end;
  27. function fromString(const str: AnsiString; base: TBase): TLongNumber;
  28. var i, n: integer;
  29. res, c: TLongNumber;
  30. begin
  31. res := 0;
  32. if str = '' then exit(res);
  33. if (str = '0') or (str = '-0') then res.inv := true;
  34. if (str[1] = '-') then begin
  35. res.inv := false;
  36. n := 2;
  37. end
  38. else begin
  39. res.inv := true;
  40. n := 1;
  41. end;
  42. while((str[n] = '0') and (n < Length(str))) do n+=1;
  43.  
  44. for i:=n to length(str) do begin
  45. c := charToLongNumber(str[i], base);
  46. Res := Res * base + c;
  47. end;
  48. if (str[1] = '-') then begin
  49. res.inv := false;
  50.  
  51. end;
  52. exit(res);
  53.  
  54. end;
  55. function toString(const val: TLongNumber; base: TBase): AnsiString;
  56. var res, buf: TLongNumber;
  57. c: longWord;
  58. begin
  59. Result := '';
  60. res := val;
  61. buf := base;
  62.  
  63. while (CompareModule(res,buf)) do begin
  64. res := divmod(res, base, c);
  65. Result += alph36[c+1];
  66. end;
  67. res := divmod(res, base, c);
  68. Result += IntToStr(c);
  69. if (res.inv = false) then begin
  70. Result += '-';
  71. end;
  72. Result := invers_str(result);
  73. end;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement