如何在 C++ 中计算 2^100 的十位值?

How can I calculate the tens place value of 2^100 in C++?

如何在 C++ 中计算 2^100 的十位值?

我试过了;

#include <cmath>
#include <iostream>

using namespace std;

int main(){
    int answer;
    answer = (unsigned long long int)pow(2, 100) % 100 / 10; //zero
    cout << answer << endl;
    return 0;
}

但是因为溢出打印了0。

Python 使用此代码正确打印答案;

print(2 ** 100 % 100 // 10)

但我如何在 C++ 中计算它?

unsigned long long int 不够大,无法存储 2**100。如果您使用的是 GCC 或 Clang,请尝试使用 __int128

#include <cmath>
#include <cstdint>
#include <iostream>
int main(int argc, char **argv) {
  int answer = ((__int128)std::pow(2, 100)) % 100 / 10;
  std::cout << answer << '\n'; // 7
}

您的类型转换有问题。

正如您从文档中看到的那样 std::pow return double

因此,解决我们问题的第一步是尝试删除类型转换。

std::pow(2, 100); // return 1.26765e+30

下一个问题我们不能将运算符 %double 类型一起使用,所以我们需要 std::fmod 所以最终的解决方案是这样的:

int answer = std::fmod(std::pow(2, 100), 100) / 10;

分两步完成:

int x = (1<<25)%100;
x = (x*x*x*x)%100;
x = x/10;