文章目录
GMP
要点:首先VS中只能使用.lib文件作静态库,网上用.a的纯属**
安装:教程+编译完成的文件
文件:上述文件还是会有点问题,在此我自己编译了一套,用起来还不错。度娘网盘 提取码lefi
环境:
首先将gmp.h及libgmp-10.lib放到同一文件夹下,记为GMPLib
- 工程右键→属性→c/c++→常规→附加包含目录:GMPLib(gmp.h所在目录)
- 工程右键→属性→链接器→常规→附加库目录:GMPLib(libgmp-10.lib所在目录)
- 工程右键→属性→链接器→输入→附加依赖项:libgmp-10.lib
- 若你的电脑中没有GMP的dll库,还需将其中的libgmp-10.dll文件放在你的可执行exe文件的同一目录下。
注:gmpxx库同理,只不过换成了libgmpxx-4.lib\dll文件。
使用:
#include <stdio.h>
#include <gmp.h>
const int MAXN = 1e5 + 5;
typedef mpz_t bint;
char sa[2020], sb[2020];
int main()
{
mpz_t a,b,t; //mpz_t 为GMP内置大数类型
scanf("%s", sa);
scanf("%s", sb);
mpz_init_set_str(a, sa, 10); //大数a初始化为字符串sa代表的数字
mpz_init_set_str(b, sb, 10);
mpz_init(t); //大数t使用前要进行初始化,以便动态分配空间
//mpz_ui_pow_ui(t, 2, 100); //GMP所有函数基本都是以mpz打头
int i;
for(i=1;i<=100;i++)
mpz_mul(t, a, b);
gmp_printf("a * b = %Zd\n", t); //输出大数,大数的格式化标志为%Zd
mpz_clears(a,b,t,NULL); //清除,最后以NULL结尾
return 0;
}
ZLIB
要点:此处使用单一静态库,环境配置中与上述有所不同,需要添加3个宏定义
安装:教程
环境:
-
包含头文件
属性–C/C+±-常规–附加包含目录(添加包含.h文件的目录)
-
定义宏
属性–C/C+±-预处理器–预处理器定义:添加3个宏: ZLIB_WINAPI;ASMV;ASMINF
-
项目包含.lib文件所在的目录:
属性–链接器–常规–附加库目录
-
项目包含.lib文件
属性–链接器–输入–附加依赖项(libstat.lib)
使用:
#include "zconf.h"
#include "zlib.h"
#include <string.h>
#include <Windows.h>
// The one and only application object
using namespace std;
#if defined(MSDOS) || defined(OS2) || defined(WIN32) || defined(__CYGWIN__)
# include <fcntl.h>
# include <io.h>
# define SET_BINARY_MODE(file) setmode(fileno(file), O_BINARY)
#else
# define SET_BINARY_MODE(file)
#endif
#define CHUNK 16384
int def(FILE* source, FILE* dest, int level)
{
int ret, flush;
unsigned have;
z_stream strm;
unsigned char in[CHUNK];
unsigned char out[CHUNK];
/*allocate defalte state*/
strm.zalloc = Z_NULL;
strm.zfree = Z_NULL;
strm.opaque = Z_NULL;
ret = deflateInit(&strm, level);
if (ret != Z_OK)
return ret;
do
{
strm.avail_in = fread(in, 1, CHUNK, source);
if (ferror(source))
{
(void)deflateEnd(&strm);
return Z_ERRNO;
}
flush = feof(source) ? Z_FINISH : Z_NO_FLUSH;
strm.next_in = in;
do
{
strm.avail_out = CHUNK;
strm.next_out = out