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



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

I tried this;

#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++中计算它?

分两步完成:

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

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 returndouble

因此,解决问题的第一步,尝试消除类型强制转换。

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

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

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

相关内容

  • 没有找到相关文章

最新更新