在C+中处理任意长度的整数+; 有人告诉我一个好的C++库,它可以用任意大的数字来处理(做操作等)(它可以是一个处理任意精度浮标的库,但是处理整数更重要)?p>

在C+中处理任意长度的整数+; 有人告诉我一个好的C++库,它可以用任意大的数字来处理(做操作等)(它可以是一个处理任意精度浮标的库,但是处理整数更重要)?p>,c++,numbers,biginteger,arbitrary-precision,C++,Numbers,Biginteger,Arbitrary Precision,请仅参考您使用的库,并告诉我您是如何设置和获取它的,可能是通过一个非常简单的示例或其他方式(基本上如果提到的库缺乏良好的文档,请提供您自己的一些输入) 作为记录,我在x64机器上使用Windows7,代码块作为我的IDE,最新的MinGW作为编译器 我试过的图书馆: vlint(没有足够的操作,但是对于小的东西可以很好地工作) bigint(易于设置,编译错误,并且没有太多文档(可能会从中产生错误)) ttmath(似乎很有希望,编译了一些大型示例程序,并因为编译错误而进行了一些修复,因为几乎

请仅参考您使用的库,并告诉我您是如何设置和获取它的,可能是通过一个非常简单的示例或其他方式(基本上如果提到的库缺乏良好的文档,请提供您自己的一些输入)

作为记录,我在x64机器上使用Windows7,代码块作为我的IDE,最新的MinGW作为编译器

我试过的图书馆:

  • vlint(没有足够的操作,但是对于小的东西可以很好地工作)

  • bigint(易于设置,编译错误,并且没有太多文档(可能会从中产生错误))

  • ttmath(似乎很有希望,编译了一些大型示例程序,并因为编译错误而进行了一些修复,因为几乎没有文档,所以语法不可理解)

  • gmp(甚至无法设置)

p、 美国删除了“问题的咆哮部分”,这基本上解释了为什么我在Stackoverflow上问了很多次,所以人们会把它读到最后

-->更新

所以我选择了一个不是直接回答我最初问题的答案,但帮了我很多解决的办法,我会把我的一些发现发布到帮助其他像我这样的C++新手开始大量的工作,而不用像我在一个简单的一步一步的微指南中那样和图书馆一起挣扎。p> 我正在使用的东西(请记住这一点,以遵循指南):

  • Windows 7 Ultimate x64

  • Amd k10 x64(一些库无法使用此功能,其他库的行为会有所不同,其他库是Amd k10的定制泰勒,因此这不仅可以帮助您使用我使用的库,还可能帮助其他库)

  • 代码::Blocks 10.05不含MinGW的版本,文件名“codeblocks-10.05-setup.exe”(安装在C:\Program Files(x86)\codeblocks上)

  • MinGW包(binutils-2.15.91-20040904-1.tar.gz gcc-core-3.4.2-20040916-1.tar.gz gcc-g++-3.4.2-20040916-1.tar.gz MinGW-runtime-3.11.tar.gz w32api-3.8.tar.gz)在C:\MinGW上提取

  • <> > TrMaStudio0.92文件名“TTMAth-0.92-SRC.TAR .Gz”解压缩并复制文件夹“TTMYDE”到文件夹“C:\CPPLIBS”(这是我把C++库放入的文件夹)

如何设置这一切

  • 转到代码:Blocks>Settings>Compiler and Debugger(此处自动检测到我的编译器。如果您没有遇到这种情况,请在“选定的编译器”上选择“GNU GCC编译器”,然后单击“设为默认值”,然后单击“编译器安装目录您可以选择编译器的安装目录或尝试自动检测”,并根据“C++编译器”上的排序选择或写入“mingw32-g++.exe”。如果发生这种情况,请执行此操作,在“所选编译器”上选择“GNU GCC编译器”,然后单击“设置为默认值”)

  • 在不离开“代码:块>设置>编译器和调试器”的情况下,将上述内容整理好,转到“搜索目录”,然后单击“编译器”,选择存储库的文件夹或放置“ttmath”文件夹的文件夹(在我的例子中是C:\CPPLibs),然后转到“链接器”并执行相同的操作

  • 要开始使用“ttmath”库进行编码,您必须将此行
    #include
    放在主函数之前(注意:如果你使用64位系统,如果你不把这一行
    #define TTMATH\u don_WCHAR
    放在这一行
    #include
    之前,你会遇到很多错误,直到我找到了另一个同样在网上挣扎的人找到并发布的修复方法,然后它才开始工作我认为这只适用于64位系统,但是如果你仅仅因为包含了“ttmath.h”头文件而出错,那么很可能就是因为这个

  • 声明具有大整数值的变量必须这样做:
    ttmath::UInt a,b,c;
    其中“a,b,c”是您的变量,“n”是您可以存储在变量中的数字大小,对于32位系统为“2^(32*n)-1”,对于64位系统为“2^(64*n)-1”

  • 将值分配给变量如果这样做
    a=333;
    (并且333的数字大于c++上的“long int”标准数据类型),它将不会编译,因为将值分配给这样的变量独立于您之前指定的大小,整数可以与“long int”一样大“C++上的标准数据类型(我自己计算的,硬的),即使你使用一个更小的值,它编译好,然后运行你的程序,它试图把这个变量写的比所提到的“long int”的数目要大。标准数据类型可以处理,那么您的数学将是错误的,请注意:要以正确的方式为变量赋值,您必须像这样赋值
    a=“333”
    (是的,我知道你基本上是这样把它当作一个字符串处理的,但是如果你决定“cout”的话,它的操作会很好,没有任何问题变量它永远不会是指数或科学记数法的结果,就像您使用标准整数数据类型得到的结果一样,而不会与一些“额外语句”耦合以正确显示数字)

p、 使用这个简单的规则来处理整数和这个库,我用一个
#define TTMATH_DONT_USE_WCHAR
#include <ttmath/ttmath.h>
#include <iostream>

using namespace std;
int main () {

int fibonaccinumber;
cin >> fibonaccinumber;
cin.ignore();

ttmath::UInt<10000> fibonacci1,fibonacci2,fibonacci3;
fibonacci1 = 1;
fibonacci2 = 1;
//cout << "1. " << fibonacci1 << "\n2. " << fibonacci2 << "\n";

for(int i=3;i<=fibonaccinumber;i++)
{fibonacci3 = fibonacci1 + fibonacci2;
//   cout << i << ". " << fibonacci3 << "\n";
fibonacci1=fibonacci2;
fibonacci2=fibonacci3;}

cout << "the " << fibonaccinumber << "th fibonacci number is " << fibonacci2;

string endprog;
getline(cin,endprog);
return 0;}