কম্পিউটার

একটি বড় সংখ্যার ফ্যাক্টরিয়াল


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

  1. বুস্ট মাল্টিপ্রিসিশন লাইব্রেরি ব্যবহার করে বড় সংখ্যার ফ্যাক্টরিয়াল

  2. একটি সংখ্যার ফ্যাক্টরিয়াল খুঁজে পেতে জাভা প্রোগ্রাম

  3. পাইথন প্রোগ্রাম একটি বড় সংখ্যার ফ্যাক্টরিয়াল খুঁজে বের করতে

  4. পাইথনে ফ্যাক্টোরিয়াল()