ในคอมพิวเตอร์ ตัวแปรจะถูกเก็บไว้ในตำแหน่งหน่วยความจำ แต่ขนาดของตำแหน่งหน่วยความจำคงที่ ดังนั้นเมื่อเราพยายามหาแฟคทอเรียลของค่าที่มากกว่าเช่น 15! หรือ 20! ค่าแฟกทอเรียลเกินช่วงหน่วยความจำและส่งกลับผลลัพธ์ที่ไม่ถูกต้อง
สำหรับการคำนวณจำนวนมาก เราต้องใช้อาร์เรย์เพื่อเก็บผลลัพธ์ ในแต่ละองค์ประกอบของอาร์เรย์ จะจัดเก็บผลลัพธ์ที่แตกต่างกัน แต่ในที่นี้ เราไม่สามารถคูณตัวเลขบางตัวกับอาร์เรย์โดยตรงได้ เราต้องทำกระบวนการคูณด้วยตนเองสำหรับตัวเลขทั้งหมดของอาร์เรย์ผลลัพธ์
อินพุตและเอาต์พุต
Input: A big number: 50 Output: Factorial of given number is: 30414093201713378043612608166064768844377641568960512000000000000
อัลกอริทึม
คูณ (x, ตัวคูณ)
ป้อนข้อมูล: ตัวเลข x และตัวคูณขนาดใหญ่เป็นอาร์เรย์
ผลลัพธ์: ผลลัพธ์หลังการคูณ
Begin carry := 0 for all digits i of multiplicand, do prod := i*x+carry i := prod mod 10 carry := prod / 10 done while carry ≠ 0, do insert (carry mod 10) at the end of multiplicand array carry := carry/10 done End
แฟคทอเรียล(n)
ป้อนข้อมูล: หมายเลข n.
ผลลัพธ์: หาแฟกทอเรียลของ n.
Begin define result array. insert 1 in the result for i := 2 to n, do multiply(i, result) done reverse the result return result End
ตัวอย่าง
#include<iostream> #include<vector> #include<algorithm> using namespace std; void multiply(int x, vector<int>&multiplicand) { //multiply multiplicand with x int carry = 0; // Initialize carry to 0 vector<int>::iterator i; for (i=multiplicand.begin(); i!=multiplicand.end(); i++) { //multiply x with all digit of multiplicand int prod = (*i) * x + carry; *i = prod % 10; //put only the last digit of product carry = prod/10; //add remaining part with carry } while (carry) { //when carry is present multiplicand.push_back(carry%10); carry = carry/10; } } void factorial(int n) { vector<int> result; result.push_back(1); //at first store 1 as result for (int i=2; i<=n; i++) multiply(i, result); //multiply numbers 1*2*3*......*n cout << "Factorial of given number is: "<<endl; reverse(result.begin(), result.end()); vector<int>::iterator it; //reverse the order of result for(it = result.begin(); it != result.end(); it++) cout << *it; } int main() { factorial(50); }
ผลลัพธ์
Factorial of given number is: 30414093201713378043612608166064768844377641568960512000000000000