最近有人在一次采访中要求我描述一种计算任意大数的阶乘的方法。一种获得所有答案数字的方法。

我搜索了很多地方,并在几个论坛中问过。但是我想知道是否有任何方法可以在不使用GMP之类的库的情况下完成此任务。

谢谢。

最佳答案

GNU Multiprecision库是一个很好的库!但是,由于您说不允许使用外部库,因此我认为唯一可能的方法是采用一个int数组,然后像用笔在纸上一样乘以数字!

这是我前一段时间写的代码。

#include<iostream>
#include<cstring>

int max = 5000;

void display(int arr[]){
    int ctr = 0;
    for (int i=0; i<max; i++){
        if (!ctr && arr[i])         ctr = 1;
        if(ctr)
            std::cout<<arr[i];
    }
}


void factorial(int arr[], int n){
    if (!n) return;
    int carry = 0;
    for (int i=max-1; i>=0; --i){
        arr[i] = (arr[i] * n) + carry;
        carry = arr[i]/10;
        arr[i] %= 10;
    }
    factorial(arr,n-1);
}

int main(){
    int *arr = new int[max];
    std::memset(arr,0,max*sizeof(int));
    arr[max-1] = 1;
    int num;
    std::cout<<"Enter the number: ";
    std::cin>>num;
    std::cout<<"factorial of "<<num<<"is :\n";
    factorial(arr,num);
    display(arr);
    delete[] arr;
    return 0;
}

“arr”只是一个整数数组,阶乘是一个简单的函数,会将给定的数字乘以“大数”。

希望这可以解决您的查询。

关于c++ - 计算任意大数的阶乘,并显示所有数字,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1966077/

10-12 14:20
查看更多