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