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

时间:2014-12-22 08:50:09

标签: c++ mpir

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

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

size_t mpz_sizeinbase (mpz t op, int base)
  

返回给定基数中的位数测量的op大小。   基数可以从2变化       删除op的符号,只使用绝对值。结果将是       确切的或1太大了。如果base是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'logicaloperations.cpp 27 1 logicaloperations

     

错误14错误C2664:'__ gmpz_sizeinbase':无法转换参数1   从'int'到   'mpz_srcptr'logicaloperations.cpp 28 1逻辑运算   **

这只是用于测试,在我的实际代码中,我会得到这样的值:

mpz_t opt= 111111111111111111111111111111111111111111111111999999999999999999999999999999999999999999999999999999999999999999999999999999999999999; 

您能否正确指出如何正确使用此功能的参数?

一个例子就足够了。

1 个答案:

答案 0 :(得分:1)

我能够自己解决这个问题。这可能是某人将来需要的,所以我在这里发帖。

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; 

}

现在我明白了!

如果有人能够进一步改进它将会有很大的帮助