Skip to content

byx2000/BigInt

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

BigInt高精度整数库

BigInt 是一个简单的高精度整数库,实现了任意精度整数的处理,支持加、减、乘、除、取余、求幂和各种比较运算。

BigInt是高精度整数的简单实现,所有运算都使用朴素方法实现。该项目仅用于学习交流,请勿用于正规项目。

项目基本情况

该项目用Visual Studio 2019构建。

项目源码全部在src目录下。

目录/文件 说明
BigInt 核心代码
Test 测试代码
main.cpp 启动代码

src/Test/TestCase目录下包含了所有测试用例。

main.cpp中包含了运行所有单元测试的代码以及使用示例。

使用说明

要使用 BigInt ,请将文件 BigInt.hBigInt.c 添加到项目中,并包含 BigInt.h 头文件。

编译前请确认开启 C++11 编译开关。

初始化

BigInt 类提供如下构造函数:

BigInt::BigInt(long long i = 0); // 用一个整数初始化,默认值为0
BigInt::BigInt(const std::string &s); // 用数字字符串初始化

示例:

BigInt n1(100); // n1 == 100
BigInt n2("1234567890"); // n2 == 1234567890

运算

BigInt 支持加、减、乘、除、取余、求幂和各种比较运算,并重载了相应运算符。

注:求幂运算符为 ^

示例:

BigInt a("23877328879187687293");
BigInt b(25);

BigInt n1 = a + b;
BigInt n2 = a - b;
BigInt n3 = a * b;
BigInt n4 = a / b;
BigInt n5 = a % b;
BigInt n6 = a ^ b;

bool b1 = a > b;
bool b2 = a >= b;
bool b3 = a < b;
bool b4 = a <= b;
bool b5 = a == b;
bool b6 = a != b;

除此之外,BigInt 还重载了 +=-=*=/=%=^= 运算符。

异常

  • 当发生除零错误时,BigInt 将抛出如下异常类:

    class DividedByZero {};
  • 在进行指数运算时,若指数小于零,BigInt 将抛出如下异常类:

    class ExponentLessThanZero {};

应用示例

求大数阶乘

BigInt res = BigInt(1);
for (int i = 2; i <= 1000; ++i)
{
    res *= BigInt(i);
}
cout << "1000! = " << res << endl;

输出:

1000! = 402387260077093773543702433923003985719374864210714632543799910429938512398629020592044208486969404800479988610197196058631666872994808558901323829669944590997424504087073759918823627727188732519779505950995276120874975462497043601418278094646496291056393887437886487337119181045825783647849977012476632889835955735432513185323958463075557409114262417474349347553428646576611667797396668820291207379143853719588249808126867838374559731746136085379534524221586593201928090878297308431392844403281231558611036976801357304216168747609675871348312025478589320767169132448426236131412508780208000261683151027341827977704784635868170164365024153691398281264810213092761244896359928705114964975419909342221566832572080821333186116811553615836546984046708975602900950537616475847728421889679646244945160765353408198901385442487984959953319101723355556602139450399736280750137837615307127761926849034352625200015888535147331611702103968175921510907788019393178114194545257223865541461062892187960223838971476088506276862967146674697562911234082439208160153780889893964518263243671616762179168909779911903754031274622289988005195444414282012187361745992642956581746628302955570299024324153181617210465832036786906117260158783520751516284225540265170483304226143974286933061690897968482590125458327168226458066526769958652682272807075781391858178889652208164348344825993266043367660176999612831860788386150279465955131156552036093988180612138558600301435694527224206344631797460594682573103790084024432438465657245014402821885252470935190620929023136493273497565513958720559654228749774011413346962715422845862377387538230483865688976461927383814900140767310446640259899490222221765904339901886018566526485061799702356193897017860040811889729918311021171229845901641921068884387121855646124960798722908519296819372388642614839657382291123125024186649353143970137428531926649875337218940694281434118520158014123344828015051399694290153483077644569099073152433278288269864602789864321139083506217095002597389863554277196742822248757586765752344220207573630569498825087968928162753848863396909959826280956121450994871701244516461260379029309120889086942028510640182154399457156805941872748998094254742173582401063677404595741785160829230135358081840096996372524230560855903700624271243416909004153690105933983835777939410970027753472000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

求2的5000次幂

cout << "2^5000 = " << (BigInt(2) ^ BigInt(5000)) << endl;

输出:

2^5000 = 141246703213942603683520966701614733366889617518454111681368808585711816984270751255808912631671152637335603208431366082764203838069979338335971185726639923431051777851865399011877999645131707069373498212631323752553111215372844035950900535954860733418453405575566736801565587405464699640499050849699472357900905617571376618228216434213181520991556677126498651782204174061830939239176861341383294018240225838692725596147005144243281075275629495339093813198966735633606329691023842454125835888656873133981287240980008838073668221804264432910894030789020219440578198488267339768238872279902157420307247570510423845868872596735891805818727796435753018518086641356012851302546726823009250218328018251907340245449863183265637987862198511046362985461949587281119139907228004385942880953958816554567625296086916885774828934449941362416588675326940332561103664556982622206834474219811081872404929503481991376740379825998791411879802717583885498575115299471743469241117070230398103378615232793710290992656444842895511830355733152020804157920090041811951880456705515468349446182731742327685989277607620709525878318766488368348965015474997864119765441433356928012344111765735336393557879214937004347568208665958717764059293592887514292843557047089164876483116615691886203812997555690171892169733755224469032475078797830901321579940127337210694377283439922280274060798234786740434893458120198341101033812506720046609891160700284002100980452964039788704335302619337597862052192280371481132164147186514169090917191909376

求斐波拉契数列第5000项

BigInt a(1), b(1);
BigInt t;
for (int i = 3; i <= 5000; ++i)
{
    t = a;
    a = b;
    b = t + b;
}
cout << "fib(5000) = " << b << endl;

输出:

fib(5000) = 3878968454388325633701916308325905312082127714646245106160597214895550139044037097010822916462210669479293452858882973813483102008954982940361430156911478938364216563944106910214505634133706558656238254656700712525929903854933813928836378347518908762970712033337052923107693008518093849801803847813996748881765554653788291644268912980384613778969021502293082475666346224923071883324803280375039130352903304505842701147635242270210934637699104006714174883298422891491273104054328753298044273676822977244987749874555691907703880637046832794811358973739993110106219308149018570815397854379195305617510761053075688783766033667355445258844886241619210553457493675897849027988234351023599844663934853256411952221859563060475364645470760330902420806382584929156452876291575759142343809142302917491088984155209854432486594079793571316841692868039545309545388698114665082066862897420639323438488465240988742395873801976993820317174208932265468879364002630797780058759129671389634214252579116872755600360311370547754724604639987588046985178408674382863125

所有使用示例都在main.cpp中。

About

A simple high-precision integer library implemented in C++.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages