亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

計算任意數字的階乘,顯示所有數字

計算任意數字的階乘,顯示所有數字

C++
慕后森 2019-12-13 15:10:15
最近有人在一次采訪中要求我描述一種計算任意大數的階乘的方法。一種獲取答案的所有數字的方法。我搜索了多個地方,并在幾個論壇中詢問。但是我想知道是否有任何方法可以在不使用GMP之類的庫的情況下完成此任務。
查看完整描述

3 回答

?
寶慕林4294392

TA貢獻2021條經驗 獲得超8個贊

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”只是一個整數數組,階乘是一個簡單的函數,會將給定的數字乘以“大數”。


希望這能解決您的查詢。



查看完整回答
反對 回復 2019-12-14
  • 3 回答
  • 0 關注
  • 478 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號