কম্পিউটারে, ভেরিয়েবলগুলো মেমোরি লোকেশনে সংরক্ষিত হয়। কিন্তু মেমোরি লোকেশনের আকার নির্দিষ্ট, তাই যখন আমরা ১৫! বা ২০! এর মতো বড় মানের ফ্যাক্টোরিয়াল বের করতে চাই, ফ্যাক্টোরিয়াল মান মেমোরি রেঞ্জ পার করে যায় এবং ভুল ফলাফল রিটার্ন করে।
বড় সংখ্যা গণনার জন্য, আমাদের রেজাল্ট সংরক্ষণের জন্য একটি অ্যারে ব্যবহার করতে হবে। অ্যারে প্রতিটি এলিমেন্টে রেজাল্টের আলাদা আলাদা ডিজিট সংরক্ষিত থাকে। কিন্তু এখানে আমরা সরাসরি কোনো সংখ্যা অ্যারের সাথে গুণ করতে পারি না, আমাদের রেজাল্ট অ্যারের সব ডিজিটের জন্য ম্যানুয়াল গুণনার প্রক্রিয়া করতে হবে।
ইনপুট এবং আউটপুট
ইনপুট: একটি বড় সংখ্যা: ৫০ আউটপুট: প্রদত্ত সংখ্যার ফ্যাক্টোরিয়াল হল: 30414093201713378043612608166064768844377641568960512000000000000
অ্যালগরিদম
multiply(x, multiplicand)
ইনপুট: সংখ্যা x, এবং বড় multiplicand অ্যারে হিসেবে।
আউটপুট: গুণনের ফলাফল।
শুরু
carry := 0
multiplicand-এর সব ডিজিট i জন্য, করুন
prod := i*x+carry
i := prod mod 10
carry := prod / 10
শেষ
যতক্ষণ carry ≠ 0, করুন
(carry mod 10) কে multiplicand অ্যারের শেষে প্রবেশ করান
carry := carry/10
শেষ
শেষfactorial(n)
ইনপুট: সংখ্যা n।
আউটপুট: n-এর ফ্যাক্টোরিয়াল বের করুন।
শুরু
result অ্যারে সংজ্ঞায়িত করুন।
result-এ 1 প্রবেশ করান
i := 2 থেকে n পর্যন্ত, করুন
multiply(i, result)
শেষ
result উল্টো করুন
result ফেরত দিন
শেষউদাহরণ
#include<iostream> #include<vector> #include<algorithm> using namespace std; void multiply(int x, vector<int>&multiplicand) { //multiplicand কে x দিয়ে গুণ করুন int carry = 0; //carry ০ দিয়ে ইনিশিয়ালাইজ করুন vector<int>::iterator i; for (i=multiplicand.begin(); i!=multiplicand.end(); i++) { //multiplicand-এর সব ডিজিটের সাথে x গুণ করুন int prod = (*i) * x + carry; *i = prod % 10; //প্রোডাক্টের শেষ ডিজিটটুকু রাখুন carry = prod/10; //বাকি অংশ ক্যারিয়ের সাথে যোগ করুন } while (carry) { //যখন ক্যারি থাকে multiplicand.push_back(carry%10); carry = carry/10; } } void factorial(int n) { vector<int> result; result.push_back(1); //প্রথমে রেজাল্ট হিসেবে 1 সংরক্ষণ করুন for (int i=2; i<=n; i++) multiply(i, result); //সংখ্যা ১*২*৩*......*n গুণ করুন cout << "Factorial of given number is: "<<endl; reverse(result.begin(), result.end()); vector<int>::iterator it; //রেজাল্টের ক্রম উল্টো করুন for(it = result.begin(); it != result.end(); it++) cout << *it; } int main() { factorial(50); }আউটপুট
Factorial of given number is: 30414093201713378043612608166064768844377641568960512000000000000