C++ c++;如何存储2^1 000 000大的变量和字符串?

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

我正在做一个练习。它说我需要输出一个数字的最后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;
    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 for
big 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;
}