Yüksek Sayıların Faktöriyeli 0 Veriyor
-
Faktoryel 10'a 0 diyor mesela..Bi nedeni vardı,int değerlerin uzunlugu hakkında..Neydi hocalar?
#include
int main ()
{
int value;
printf("Enter the value:");
scanf("%d",&value);
int sonuc;
sonuc=factorial(value);
printf("Factorial of %d is : %d \n ", value,sonuc);
return 0;
}
int factorial(int fact)
{
if(fact<=1)
return 1;
else
return(fact*factorial(fact-1));
} -
Sonucun değerini double yap.int 32000 üstünde çalışmaz.
-
return(fact*factorial(fact-1));
---------
fact =?
Edit: bu kod derleniyor mu?...
Algoritman da yanlış gözüküyor..
Programın amacı ne?
Bir de fonksiyon kendi kendini çağırıyor??
-
sandman bunu yazdı:
-----------------------------Sonucun değerini double yap.int 32000 üstünde çalışmaz.
-----------------------------int tanımlı bir sayı double yapmak gerekszidir her halde fakat unsigned tanımlamak daha doğrudur...
-
int derleyicinin türüne ve ayarına göre short int yada long int e çevrilecektir.
Vc++ için default olarak long int yani 32 bit signed integer olacaktır.
short int: -32768...32767 arası değer alır, long int ise -2^31....+2^31-1 aralığında değer alabilir yani -2 milyar küsürden +2 milyar küsüre.
Unsigned yaparsan bu türleri alabildiği max değer 2 katına çıkar fakat negatif değer alamaz, alabildiği en küçük değer 0 olur.
Sen int veri türüyle daha büyük sayılarla çalışamazsın. Arkadaşın dediği gibi double kullanabilirsin fakat o da 14 digitten sonra precisonu yitirir.
Faktoriyel programi için kafani kariştirmaya değmez, ilerde yapıları fln gördüğünde anlarsın bunu nasıl aşabileceğini.
-
hata oldu
-
#include
#include
using namespace std;
int main(int argc, char *argv[])
{
unsigned fakt;
//int fakt;
int say,i;
cin>>say;
fakt=1;
for (i=say;i>1;i--)
{
fakt=fakt*i;
}
cout<< fakt<<endl;
system("PAUSE");
return EXIT_SUCCESS;
}*** c++ kodu 10 için doğru veriyor..
-
ltcelik bunu yazdı:
-----------------------------return(fact*factorial(fact-1));
---------
fact =?
Edit: bu kod derleniyor mu?...
Algoritman da yanlış gözüküyor..
Programın amacı ne?
Bir de fonksiyon kendi kendini çağırıyor??
-----------------------------özyineleme kullanmış hocam yanlış olan bir şey yok..
ayrıca int ın boyutlarını aştığın için öyle oluyor (:
long int olarak ya da double olarak tanımlarsan sorun ortadan kalkar ama fazla kasmaya gerek yok altı üstü faktoriyel programı
-
buyur hacı bunu dene <br>
void faktoryel(int sayi)
{
#define BASAMAK 300
unsigned s,i,aktif,dizi[BASAMAK]={0};
dizi[BASAMAK-1]=s=1;
aktif=BASAMAK-1;
while(s<=sayi)
{
for(i=0;i<BASAMAK;++i)
dizi[i]*=s;
for(i=1;i<BASAMAK;++i)
{
dizi[BASAMAK-(i+1)]+=(dizi[BASAMAK-i]/10);
dizi[BASAMAK-i]%=10;
if(dizi[BASAMAK-(i+1)])
aktif=BASAMAK-(i+1);
if(dizi[0]>1000000)
printf("Yetersiz alan BASAMAK = %u\n",BASAMAK);
}
++s;
}
for(i=aktif;i<BASAMAK;++i)
printf("%d",dizi[i]);
}<br>
yeterli alan olursa 400 milyona kadar faktoryel alabilirsin basamagı yükseltmen yeter
