0

求 2^1000 的数字之和

使用函数,用户输入基数和指数,例如 4^5(基数 4,指数 5)。

如果比较向量中输出的值和数字,则从第 16 位开始失败。

我的尝试:

#include<iostream>
#include<cmath>
#include<vector>
using namespace std; 


double Integer() {
    double m,o;  
    double n; 

    cout<<"Enter Base: ";
    cin>>m; 
    cout<<"Enter Exponent: ";
    cin>>o; 

    n= pow(m,o);

    cout.precision(302); 

    cout << "The Answer is: " << n << endl; 

    return n;
}

void SumoftheDigits(double n) { 

    double x, q, w=0, r, d;
    int length = r = (log(n)/ log(10)) + 1;

    vector<double> v1;

    modf((n/pow(10,r)),&x);

    while (r != 0) {

        q = modf( (n/pow(10,r-1)), &x);
        n -= x*pow(10,r-1);

        r--;
        d = x;

        v1.push_back(d);

    }

    for(vector<double>::iterator it = v1.begin(); it != v1.end(); ++it){
            cout << *it << " ";
    } 

    cout << endl; 

    int i;
    long long int Sum = 0; 

    while (i != v1.size()) {
        Sum += v1[i]; 
        i++;
    } 

    cout << "The Sum of the Digits is: " << Sum << endl; 

} 

int main() {

    double n = Integer(); 

    SumoftheDigits(n); 

    return 0;
}
4

1 回答 1

3

浮点类型(例如floatdouble)的精度有限,因此您不能使用它们来计算大数,例如 2^1000 左右的值。如您所见,会有不准确之处。

您将需要使用整数方法来执行此操作。普通整数不能表示2^1000这么大的数字,所以需要多做一些工作。例如,您可以在一个数组中分别表示每个数字,并像在学校学习的那样实现长乘法。

还有诸如 GMP 之类的库可以表示非常大的整数(仅受计算机内存限制),这将使这项任务变得容易。

于 2012-11-05T21:46:26.773 回答