کمک در مورد c++(فاکتوریل)

sara_m20

عضو جدید
برنامه ای در مورد فاکتوریل می خواستم....................این برنامه باید تا 1000فاکتوریل را حساب کنه؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟خواهشا کمکم کنید.اگه میشه زود.در ضمن به زبان c++ میخواستم:w19:
 

mr.sajjad

عضو جدید
برنامه ای در مورد فاکتوریل می خواستم....................این برنامه باید تا 1000فاکتوریل را حساب کنه؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟خواهشا کمکم کنید.اگه میشه زود.در ضمن به زبان c++ میخواستم:w19:

هر عددی بعنوان ورودی بگیره حساب میکنه

کد:
#include <stdio.h>
#include <conio.h>
unsigned long fact(int x){
	if (x != 0)
		return(x * fact(x-1));
	return 1;
}
void main(){
	int i;
	clrscr();
	cout << "\n Enter number:";
	cin >> i;
	cout <<"\n number: " << i <<"fact: " << fact(i);
	getch();
}
 

A.S.Roma

عضو جدید
کاربر ممتاز
هر عددی بعنوان ورودی بگیره حساب میکنه

کد:
#include <stdio.h>
#include <conio.h>
unsigned long fact(int x){
    if (x != 0)
        return(x * fact(x-1));
    return 1;
}
void main(){
    int i;
    clrscr();
    cout << "\n Enter number:";
    cin >> i;
    cout <<"\n number: " << i <<"fact: " << fact(i);
    getch();
}
فکر نمی کنم منظور دوستمون این برنامه باشه.
شما هر چقدر از Data Type های استاندارد استفاده کنید نمی تونید عددی بزرگتر از 64Bit رو تولید کنید.
برای کار با اعداد بزرگ باید از روش های دیگر مثل Mantisaa/Exponent یا کار با Linked List استفاده کنید.
الگوریتم کار :
http://www.daniweb.com/forums/thread196216.html
مثلا" نتیجه 700 فاکترویل میشه :
24220401247502721798678750938123522185909833857292 07299450679664929938160215647420444519051666484819 24932145667149704984232752509387481734383839375763 14592284508284999722712741401603110578305584636363 37124079332447820739281101037112665387537180790257 57791927310826291690475040523505506008401221949289 23756351362966220200231781096198180461799068974504 20548912610870589088056503913584562211037693288782 96090019507413099979903597071143627933909429203286 62604963758254614277275557100030077529061414706395 74390024988514914264449865006458873226951941899545 97033391035158855923294082956927698608022220028996 61283439316300287892033826547496034735163147652627 72257171154686716862814184728741187147936349501653 19745745566041313450604912204494705262338468208886 47906733095692923842156117880142749549059141483623 03226200246816441301934846080254998647325270606104 51208805871229334986218539924330905429957638171880 62472381952326046426143298940706361637536720912327 51612378348273840757873567717532879242518337119540 60294360941162934900956604372083673740109088239297 50312246125312456426872967170537477345064433149245 58119560479901478736209556925161517737110399754730 55185406632842001472865789628693652378708020647632 71571364413187734327510072631080569582516938112809 57243202460157111778617472683761623869704457588005 15803749566506962577893089809572579471070163923823 15281155796191202873786892389343351985086659339172 57143975277707590597511989345068701735940169672561 86471310711501674736899269011608263376217234668896 98408625172643840000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000
که طبیعتا" تو هیچ دیتاتایپ استانداردی جا نمیشه !
 
آخرین ویرایش:

mr.sajjad

عضو جدید
برنامه ای در مورد فاکتوریل می خواستم....................این برنامه باید تا 1000فاکتوریل را حساب کنه؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟خواهشا کمکم کنید.اگه میشه زود.در ضمن به زبان c++ میخواستم:w19:

کد:
[LEFT]#include <iostream>
#include <iomanip>
#include <ctime>
using namespace std;

int Arr[100000];

int main()
{
    int n ;
    while(cin >> n)
    {   
        clock_t startTime= clock();
        int carry =0 , up=1 , tmp=0;        
        cout << n << "!\n";
        
        Arr[0]=1;
        for(int i=2; i<=n; i++)
        {
            for(int current=0; current<up; current++)
            {
                tmp =(i* Arr[current]+carry );
                Arr[current]= tmp % 1000 ;
                carry =  tmp / 1000;                
            }

            if(carry)
            {
                Arr[up++] = carry;
                carry =0;
            }
        }

        cout << Arr[up-1];
        for(int i=up-2; i>=0; i--)
        {
            cout << setw(3) << setfill('0') << Arr[i];
            Arr[i]=0;
        }
        cout << endl;
        clock_t endTime= clock();
        cout << "cacluating time : " << setprecision(3) << fixed << (double)(endTime - startTime) / CLOCKS_PER_SEC << endl;
    }

    return 0;

}[/LEFT]

منبع
 
آخرین ویرایش:
بالا