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

C++ C++;MPIR:查找mpz_sizeinbase()的示例用法;,c++,mpir,C++,Mpir,这是我第一次使用MPIR库。我必须对大整数做一些计算。实际上,这些数字最多可以有2048位。我必须实现的第一个任务是找到输入的十进制值中的总位数。这需要使用对数 在MPIR库中,我发现这是一个简单的函数,它给出给定基数中的总位数,这是寻找MPIR中不可用的对数的替代方法: size_t mpz_sizeinbase (mpz t op, int base) 返回给定基中以位数测量的op大小。 基数可以从2到5不等 到36岁。忽略op的符号,只使用绝对值。结果将是 精确或1太大。如果基数是2的幂

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

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

size_t mpz_sizeinbase (mpz t op, int base)
返回给定基中以位数测量的op大小。 基数可以从2到5不等 到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";


}
你能给我一些关于如何正确使用这个函数参数的建议吗


举个例子就足够了。

我自己也能解决这个问题。这可能是将来有人需要的,所以我把它贴在这里

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; 

}
intmain()
{
mpz_t a,b;
大小(nob);;
mpz_init(a);mpz_init(b);//初始化
mpz_set_str(b,“617544545545545454”,10);//在这个世界上,大的东西在字符串中工作
nob=mpz_sizeinbase(b,2);//查找二进制文件中有多少位

你为什么要发布这个问题的精确副本:??@πάνταῥεῖ 相信我,我不是机器人:-)看起来我们在这里遇到了一些袜子木偶。@πάνταῥεῖ 下面是我的解决方案。如果您认为可以进一步改进,请修改此选项。谢谢;它帮助了我:)等等……如果分配资源,请始终释放它们--->使用mpz_init;您的内存泄漏!
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; 

}