:construction: Work in progress :construction:
Download the single-include header file to a location under
your include path. Then #include
it in your code:
#include "BigInt.hpp" // the actual path may vary
Create objects of the BigInt
class, and do what you got to do!
BigInt big1 = 1234567890, big2;
big2 = "9876543210123456789098765432101234567890";
std::cout << big1 * big2 * 123456 << "\n";
// Output: 1505331490682966620443288524512589666204282352096057600
=
The second operand can either be a BigInt
, an integer (up to long long
)
or a string (std::string
or a string literal).
big1 = 1234567890;
big1 = "123456789012345678901234567890";
big1 = big2;
+
, -
big1 = +big2; // doesn't return the absolute value
big1 = -big2;
+
, -
, *
, /
, %
One of the operands has to be a BigInt
and the other can be a BigInt
, an
integer (up to long long
) or a string (std::string
or a string literal).
big1 = big2 + 1234567890;
big1 = big2 - "123456789012345678901234567890";
big1 = big2 * big3;
big1 = 1234567890 / big2;
big1 = "123456789012345678901234567890" % big2;
+=
, -=
, *=
, /=
, %=
The second operand can either be a BigInt
, an integer (up to long long
)
or a string (std::string
or a string literal).
big1 += big2;
big1 -= 1234567890;
big1 *= "123456789012345678901234567890";
big1 /= big2;
big1 %= 1234567890;
++
, --
big1 = ++big2; // pre-increment
big1 = --big2; // pre-decrement
big1 = big2++; // post-increment
big1 = big2--; // post-decrement
<
, >
, <=
, >=
, ==
, !=
One of the operands has to be a BigInt
and the other can be a BigInt
, an
integer (up to long long
) or a string (std::string
or a string literal).
if (big1 < 1234567890
or big1 > "123456789012345678901234567890"
or big1 <= big2
or 1234567890 >= big1
or "123456789012345678901234567890" == big1
or big1 != big3) {
...
}
<<
, >>
std::cout << big1 << ", " << big2 << "\n";
output_file << big1 << ", " << big2 << "\n";
std::cin >> big1 >> big2;
input_file >> big1 >> big2;
to_string
, to_int
, to_long
, to_long_long
Convert a BigInt
to either a string
, int
, long
, or long long
.
Note: If the BigInt
is beyond the range of the target type, an
out_of_range exception is thrown.
some_str = big1.to_string();
some_int = big1.to_int();
some_long = big1.to_long();
some_long_long = big1.to_long_long();
abs
Get the absolute value of a BigInt
.
big1 = abs(big2);
big_pow10
Get a BigInt
equal to 10exp.
big1 = big_pow10(5000); // big1 = 10^5000
gcd
Get the greatest common divisor (GCD aka. HCF) of two BigInt
s. One of the
arguments can be an integer (up to long long
) or a string (std::string
or a string literal).
big1 = gcd(big2, big3);
big1 = gcd(big2, 1234567890);
big1 = gcd(big2, "123456789012345678901234567890");
big1 = gcd(1234567890, big2);
big1 = gcd("123456789012345678901234567890", big2);
lcm
Get the least common multiple (LCM) of two BigInt
s. One of the arguments
can be an integer (up to long long
) or a string (std::string
or a
string literal).
big1 = lcm(big2, big3);
big1 = lcm(big2, 1234567890);
big1 = lcm(big2, "123456789012345678901234567890");
big1 = lcm(1234567890, big2);
big1 = lcm("123456789012345678901234567890", big2);
pow
Get the value of baseexp as a BigInt
. The base can either be
a BigInt
, an integer (up to long long
) or a string (std::string
or a
string literal).
big1 = pow(big2, 789);
big1 = pow(987654321LL, 456); // suffix literal with LL to prevent conflicts
big1 = pow("1234567890", 123);
sqrt
Get the integer square root of a BigInt
.
big1 = sqrt(big2);
big_random
Get a random BigInt
, that either has a random number of digits (up to
1000), or a specific number of digits.
// get a random BigInt that has a random number of digits (up to 1000):
big1 = big_random();
// get a random BigInt that has 12345 digits:
big1 = big_random(12345);
Since this project is built as a header-only library, there are no source files. However, there are unit tests for each header file that the project is split into. These can be compiled and built either through the command line, or using an IDE that has direct support for CMake (such as CLion, Qt Creator) or for which CMake can generate project files (Visual Studio, Eclipse CDT, Code::Blocks and more).
On Linux and macOS, you can compile and run the tests using the command line from the project's root directory.
make
.make test
.make release
. The generated file will appear in the release
folder.Settings > Build > CMake
, set the Generation path
to build
.Then you can simply select which target (unit test) you want to build/run, and your IDE will do the rest.
In case your IDE does not support CMake directly, you will need to run cmake
via the command line with the appropriate flags to generate the project files
for your IDE. Give it a try, it's not supposed to be hard!
Please read the contributing guidelines for details on how to contribute to the project.
This project is licensed under the terms of the MIT license.