তামিম শাহরিয়ার সুবিন-এর লেখা কম্পিউটার প্রোগ্রামিং ২য় খণ্ড প্রকাশ করেছে দ্বিমিক প্রকাশনী। বিস্তারিত জানতে এখানে ক্লিক করুন।

গৌণিক / ফ্যাক্টরিয়াল

এমন একটি প্রোগ্রাম লিখতে হবে যেটি একটি সংখ্যার গৌণিক (মানে, ফ্যাক্টরিয়াল - factorial) বের করতে পারে।

ইনপুট
প্রথমে একটি সংখ্যা দেওয়া থাকবে এবং ওই সংখ্যার মান যত, তারপর ততটি লাইন থাকবে। প্রতি লাইনে একটি পূর্ণসংখ্যা, N থাকবে। N-এর মান হবে 0 থেকে 15-এর ভেতর (0 <= N <= 15)।

আউটপুট
প্রতি লাইনে N-এর factorial বা গৌণিক প্রিন্ট করতে হবে।


৫২টি প্রোগ্রামিং সমস্যা ও সমাধান বইতে এই সমস্যার সমাধান নিয়ে আলোচনা করা হয়েছে।

১৫টি মন্তব্য:

  1. ফ্যাক্টোরিয়ালের জন্য unsigned long int ডেটা টাইপ ব্যবহার করলে ১৫ এর ফ্যাক্টোরিয়ালের ভুল মান রিটার্ন করে । long long int ব্যবহার করে সঠিক উত্তর পাওয়া গেছে । কেন ?

    উত্তরমুছুন
    উত্তরগুলি
    1. unsigned long int ১৫ এর ফ্যাক্টরিয়াল ধরার মত যথেষ্ট বড় নয়, long long int যথেষ্ট বড়

      মুছুন
  2. The range of unsigned long int is >> 0 to 4,294,967,295
    The value of factorial 15 is out of range.
    So it will give you a garbage value.

    উত্তরমুছুন
  3. আমি যদি n =100 ইনপুট দিতে চাই তাহলে unsigned long long int, এই সীমা তে হবে না!! n = ১০০ এর জন্য আমি কি করতে পারি???? ওইটা নিয়ে একটু আলোচনা করলে উপকৃত হতাম :D

    উত্তরমুছুন
    উত্তরগুলি
    1. Unsigned Long Long দিয়ে n = 20 এর বেশি ফ্যাক্টোরিয়াল কোনো ভাবেই প্রিন্ট করা সম্ভব নয় । এজন্য আপনাকে বিগ ইন্টেজার বা স্ট্রিং ম্যানিপুলেশন এর সাহায্য নিতে হবে । এক কথায় স্ট্রিং এর যোগ বিয়োগ গুন ভাগ করা জানতে হবে ।

      মুছুন
  4. yay!! ive used double type and used %.0lf while printing. it worked!!
    and then accepted!!
    :-)

    উত্তরমুছুন
  5. sir code টায় problem কোথায়?
    #include

    int main()
    {
    int i,t;
    unsigned long int num,p,j;

    scanf("%d",&t);
    for(i=0;i<t;i++)
    {
    scanf("%lu",&num);
    p=1;
    for(j=2;j<=num;j++)
    {
    p=p*j;
    }
    printf("%lu\n",p);
    }
    return 0;
    }

    উত্তরমুছুন
  6. এই মন্তব্যটি লেখক দ্বারা সরানো হয়েছে।

    উত্তরমুছুন
  7. #include
    int main()
    {
    long long int i,j,n,a,b;
    long long int s=1;
    scanf("%lld",&n);
    long long int ara[n];
    for(i=0;i=1;j--)
    {
    s=s*j;
    }

    ara[i]=s;
    s=1;
    }
    for(i=0;i<n;i++)
    {
    printf("%lld\n",ara[i]);
    }



    return 0;
    }

    its working well.but why not accepting?

    উত্তরমুছুন
  8. আমি যাদের প্লাগইন ব্যবহার করছি, ওদের সাইট ডাউন। আপাতত অপেক্ষা করা ছাড়া উপায় নেই।

    উত্তরমুছুন
  9. Hello Subeen bhaya, I solved this problem and submitted it. I am not sure why my code hasn't been accepted. It worked fine when I tested it with the numbers in the problem.

    #include
    int main()
    {
    int n,num;
    scanf("%d",&num);

    while(num--)
    {
    long long int fact=1;
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
    fact=fact*i;
    }
    printf("%lld\n",fact);
    }

    return 0;
    }

    উত্তরমুছুন

এখানে বিষয়সংশ্লিষ্ট মন্তব্য কিংবা প্রশ্ন করা যাবে। বাংলায় মন্তব্য করার সময় বাংলা হরফে লিখতে হবে। আর রোমান হরফে লিখলে ইংরেজিতে লিখতে হবে। নতুবা মন্তব্য প্রকাশ করা হবে না। ধন্যবাদ।