۰۵-خرداد-۱۳۹۰, ۱۹:۳۹:۵۰
۱۷-اردیبهشت-۱۳۹۱, ۱۰:۵۸:۲۵
سلام دوست عزیز
خیر نمی شه زبان c فکر کنم فقط تا فاکتوریل 16 رو حساب می کنه
خیر نمی شه زبان c فکر کنم فقط تا فاکتوریل 16 رو حساب می کنه
۱۷-اردیبهشت-۱۳۹۱, ۱۴:۵۲:۵۵
(۱۷-اردیبهشت-۱۳۹۱, ۱۰:۵۸:۲۵)sjh نوشته است: [ -> ]سلام دوست عزیزسلام دوست عزیز خواستم جواب ندم چون پست قدیمی بود ولی اینو رو چه اساسی میگی نمیشه از شدن میشه تازه با همون الگوریتم ساده تو visual studio اگه از نوع long double تعریف کنی !33 فاکتوریل حساب می کنه
خیر نمی شه زبان c فکر کنم فقط تا فاکتوریل 16 رو حساب می کنه
با یه سری تکنیک ها هم میشه رنجشو افزایش داد مثلا از آرایه یا اشاره گر یا رشته ها استفاده کنی سورس زیر نگاش کن
کد:
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// GROUP 12
// Group members:Aniqa Hayee(091105), Nimra Mustafa(091133), Javeria Raja(091120)
//
// BS(CS)-Semester I-Section B
// AIR UNIVERSITY<ISLAMABAD,PAKISTAN>
//
//Computer Programming
//Project:To calculate the factorial of a large number
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#include <iostream>
using namespace std;
void main()
{
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
long k;
cout<<"Enter a number whose factorial needs to be calculated:";
cin>>k;
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////code for numbers which are less than 33 and greater than 3///////////////////////////////////////////////////////////
if (k<=33)
{
double long fact=1;
fact=1;
for(int b=k;b>=1;b--)
{
fact=fact*b;
}
cout<<"The factorial of "<<k<<" is "<<fact<<endl;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////code for numbers which are greater than 33 ///////////////////////////////////////////////////////////
else
{
int numArr[10000];
int total,rem=0,count; //rem use to save remainder of division(Carry Number).
register int i; //register will enhance performance by minimizing access time
//int i;
for(i=0;i<10000;i++)
numArr[i]=0; //set all array on NULL.
numArr[10000]=1; //start from end of array.
for(count=2;count<=k;count++)
{
while(i>0)
{
total=numArr[i]*count+rem; //rem will add the carry number to the next array digit that is multiplied to the count
rem=0;
if(total>9)
{
numArr[i]=total%10;
rem=total/10;
}
else
{
numArr[i]=total; //numArr[i] is being accessed in this for loop because we have made i as register which means the memory is allocated
}
i--;
}
rem=0;
total=0;
i=10000;
}
cout<<"The factorial of "<<k<<" is ";
for(i=0;i<10000;i++)
{
if(numArr[i]!=0 || count==1)
{
cout<<numArr[i];
count=1;
}
}
cout<<endl;
}
}
یه خطای زمان اجرا میده واسه اعداد بزرگتر از !33 فاکتوریل ولی با ماشین حساب ویندوز که چک کردم دقتش تقریبا معادل اونه