这是我第一次使用 MPIR 库。我必须对大整数进行一些计算。实际上,这些数字最多可以有 2048 位。我必须执行的第一个任务是找到输入的十进制值中的总位数。这需要使用对数。
在 MPIR 库中,我发现这是一个简单的函数,它给出了给定基数中的总位数,这是查找 MPIR 中不可用的对数的替代方法:
size_t mpz_sizeinbase (mpz t op, int base)
返回以给定基数中的位数测量的 op 的大小。base 可以在 2 到 36 之间变化。 op 的符号被忽略,只使用绝对值。结果将是精确的或 1 太大。如果 base 是 2 的幂,则结果总是准确的。如果 op 为零,则返回值始终为 1。此函数可用于确定将 op 转换为字符串时所需的空间。正确的分配量通常比 mpz_sizeinbase 返回的值多两个,一个用于负号,一个用于空终止符。请注意,mpz_sizeinbase(op,2) 可用于定位 op 中的最高有效 1 位,从 1 开始计数。(与从 0 开始的按位函数不同,请参阅第
我正在尝试在我的程序中按如下方式使用此功能:
#include < cstdio>
#include < stdlib.h>
#include < gmpxx.h>
#include < iostream>
#include <mpirxx.h>
#include <math.h>
#include <windows.h>
void main()
{
mpz_t opt;
size_t nob;
opt=200;
nob= mpz_sizeinbase(opt, 10);
cout << nob<<"\n";
}
答案应该是 3。
但是在编译过程中出现以下错误:
错误 13 错误 C2440:“=”:无法从“int”转换为“mpz_t”逻辑操作.cpp 27 1 逻辑操作
错误 14 错误 C2664:“__gmpz_sizeinbase”:无法将参数 1 从“int”转换为“mpz_srcptr”logicaloperations.cpp 28 1 logicaloperations **
这仅用于测试,在我的实际代码中,我将具有如下值:
mpz_t opt= 111111111111111111111111111111111111111111111111999999999999999999999999999999999999999999999999999999999999999999999999999999999999999;
能否指点一下如何正确使用这个函数的参数?
一个例子就足够了。