如何在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;