C++ c++;如何存储2^1 000 000大的变量和字符串?
我正在做一个练习。它说我需要输出一个数字的最后3位数字,该数字的2次方为C++ c++;如何存储2^1 000 000大的变量和字符串?,c++,C++,我正在做一个练习。它说我需要输出一个数字的最后3位数字,该数字的2次方为n(2^n) 但输入是n=1000000 该代码使用较低的值,但当输入为1000000时,该数字会变得太大 我的代码: #include <iostream> #include <cmath> #include <string> using namespace std; int main() { unsigned long long n; cin >> n
n
(2^n)
但输入是n=1000000
该代码使用较低的值,但当输入为1000000时,该数字会变得太大
我的代码:
#include <iostream>
#include <cmath>
#include <string>
using namespace std;
int main()
{
unsigned long long n;
cin >> n;
unsigned long long sk = pow(2, n);
if (sk < 1000) cout << sk;
else {
string ats = to_string(sk); // converting the number to string
// so I could output 3 last digits
// probably not the best solution
// for this exercise
n = ats.length();
for (unsigned long long i = n - 3; i < n; i++) {
cout << ats[i];
}
}
return 0;
}
#包括
#包括
#包括
使用名称空间std;
int main()
{
无符号长n;
cin>>n;
无符号长sk=pow(2,n);
如果(sk<1000)不能尝试以下方法:
- 将结果初始化为1
- 在从1到n的循环中:
- 结果*=2
- 结果%=1000
这是因为最后3位数字的结果不依赖于较大的数字您可以计算数字的模1000。只需保存三个最低有效位并删除较高有效位不会改变结果。
只要做:
int结果=1;
对于(int i=0;i
google forbig numbers c++
当你将2个数字相乘时,这些数字中的哪一部分决定了最后3个位置?你可以用模运算来实现这一点,不需要大数字库。模运算会帮你。毕竟,当你将一个数字乘以2时,最后三个数字并不取决于更高的数字,a他们不是吗?1,2,4,8,16,32,64,128,256,512,024,048,096,192,384,768,等等。练习的重点是找到一种方法来计算数字的最后3位,而不实际计算数字。是的,这是一个正确的解决方案。谢谢。谢谢你的解决方案。
int result = 1;
for(int i = 0; i < n; i++){
result = (result * 2) % 1000;
}