কম্পিউটারে, ভেরিয়েবলগুলি মেমরি অবস্থানে সংরক্ষণ করা হয়৷ কিন্তু মেমরি অবস্থানের আকার স্থির, তাই যখন আমরা 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