在 C++ 中打印 pow() 函数的精确值

Tej*_*hav 1 c++ type-conversion cmath pow

在此输入图像描述我的输出出错了。我想我选错了。请帮帮我。

    int n;
    cin>>n;
    unsigned long long int a,s;
    cin>>a;
    s=(2*pow(10,n)+a);
Run Code Online (Sandbox Code Playgroud)

但是,当我给出大的n类似1718然后我的输出并s没有按预期进行。请参阅输出图像,例如:when n=17a=67576676767676788那么s=267576676767676800理想情况下应该是 2*10^17 + 67576676767676788

Mar*_*k R 6

首先你必须了解发生了什么。

  1. 为了能够使用std::pow编译器会默默地将整数类型转换为整数类型double,并且返回值也是一个double
  2. 请注意,double有 16 位有效数字(以十进制表示)
  3. 当您进行赋值转换时,doubletolong long int会默默执行
  4. unsigned long long int如果此类型有 64 位,则 10 的最大幂为 19

现在,如果您超出了此限制,您应该使用外部库。gmp相当不错。

如果可以接受范围限制,则unsigned long long int只需实现您自己的幂函数即可。