Вводная


Наткнулся я как-то на проблему в одном старом проекте с хранением игровой даты ("спасибо" коду-ровестнику) в миллисекундах. Конечно, с датой 2005 года unsigned long long вполне справлялся, но, а что если разработчику захочется фентези в 3987 году? Единственный вариант, что пришёл мне тогда в голову: хранить число в строке. Цеплять сторонние библиотеки под это дело мне не хотелось, поэтому я решил сделать небольшой класс с сокращением fluint.


Доступно


  • Базовая математика:
    1. +,-,*,/
    2. +=, -=, *=, /=
  • Логические операции: ==, !=, <, >
  • Преобразования:
    1. const char*
    2. int
    3. long long
  • ostream (<<)
  • istream(>>)
  • Доступ по индексу (разряд: десятки, сотни, etc)

Примеры


fluint BigData = (unsigned long long)(-1);  // 18446744073709551615
BigData += 135;  // 18446744073709551750
fluint NotBig = BigData / 10; // 1844674407370955175
unsigned long long SimpleData = NotBig - 5; // 1844674407370955170

Комментарии (4)


  1. MomoDev
    16.10.2019 23:55
    +2

    В общем вы написали свой велосипед длинной арифметики. А в чем собственно заключается полезность статьи?


  1. fougasse
    17.10.2019 00:54

    Какую задачу вы решили?
    Чем существующие реализации не подошли?
    Почему 11 плюсы в конце 2019 года?
    В чём кроссплатформенность?
    Это лабораторная работа?
    Вопросы-вопросы.


  1. ncr
    17.10.2019 01:27

    а что если разработчику захочется фентези в 3987 году?

    Если проблемы нет, её надо придумать.


  1. vital72
    17.10.2019 03:45

    что за жесть… хранить внутреннюю переменную в виде строки, а умножение — это ващще эпик фэйл.