C++ MPIR:查找 mpz_sizeinbase(); 的示例用法



这是我第一次使用MPIR库。 我必须对大整数进行一些计算。实际上,这些数字最多可以有 2048 位。 我必须实现的第一个任务是找到输入的十进制值中的总位数。 这需要对数的使用。

在 MPIR 库中,我发现这是一个简单的函数,它给出了给定底数中的总数,这是查找 MPIR 中不可用的对数的替代方法:

size_t mpz_sizeinbase (mpz t op, int base)

返回以给定基数中的位数测量的 op 大小。 基数可以从 2 不等 到 36。op 的符号被忽略,只使用绝对值。结果将是 精确或 1 太大。如果基数是 2 的幂,则结果始终是精确的。如果 op 为零,则返回 值始终为 1。 此函数可用于确定将 op 转换为字符串时所需的空间。这 正确的分配量通常比mpz_sizeinbase返回的值多两倍, 一个额外的减号和一个空终止符。 需要注意的是,mpz_sizeinbase(op,2(可用于定位最重要的1位 在 OP 中,从 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"逻辑运算.cpp 28 1 逻辑运算 **

这只是为了测试,在我的实际代码中,我将具有这样的值:

mpz_t opt= 111111111111111111111111111111111111111111111111999999999999999999999999999999999999999999999999999999999999999999999999999999999999999; 

你能给出一些如何正确使用这个函数的参数的指示吗?

一个例子就足够了。

好吧,

我能够自己解决这个问题。将来有人可能会要求这样做,所以我在这里发布它。

int main()
{
 mpz_t a, b ;
 size_t nob; 
mpz_init (a); mpz_init (b);  //initialization 
mpz_set_str (b, "61754454545545454545454", 10); //large things work in strings in this world 
nob = mpz_sizeinbase(b, 2); //find how many bits are there in the binary 
cout<<nob<<"n"; 
return 0; 
}

现在我明白了!

如果有人可以进一步改进它,那将有很大帮助

相关内容

  • 没有找到相关文章

最新更新