Jump to content
Forumu Destekleyenlere Katılın ×
Paticik Forumları
2000 lerden beri faal olan, çok şukela bir paylaşım platformuyuz. Hoşgeldiniz.

C++'da 3000 faktoriyel


paradoksalkedi

Öne çıkan mesajlar

e çarpıcan.

en uzun double vardı sanırım dimi?
ha bide precision istiosan, bignumber olayına girmen lazım ama gerek yok sanırsam.

ha eğer, rakamlara sığmıyorsa, eksponenşıl şekilde göstermene izin var mı?
varsa,

belli bi değerden sonra stringe çevir, eksponenşıl yazdır öle hesaplat
Link to comment
Sosyal ağlarda paylaş

STOP

long integer, adi ustunde daha genis alani kapsayani
genel kural olarak 32 bitlik makinede int 32 ise long 64 bit
her zaman boyle olmuyor tabi, o yuzden long long vb tipler var

double ise tamsayi degil, bildigin floatin double precision olani
ikisini ayni is icin kullanirsan newegg'de fiyat betimlemek icin floating point kullanip 150.000000000000001 usd cikaran insanlar gibi endise verici durumlara dusersin
Link to comment
Sosyal ağlarda paylaş

Kod

#include
#define MAX 10000
void factorialof(int);
void multiply(int);
int length = 0;
int fact[MAX];

int main(){
int num;
int i;

printf("Enter any integer number : ");
scanf("%d",&num);

fact[0]=1;

factorialof(num);

printf("Factorial is : ");
for(i=length;i>=0;i--){
printf("%d",fact);
}
return 0;
}
void factorialof(int num){
int i;
for(i=2;i<=num;i++){
multiply(i);
}
}
void multiply(int num){
[i]long
i,r=0;
int arr[MAX];
for(i=0;i<=length;i++){
arr[i]=fact[i];
}

for(i=0;i<=length;i++){
fact[i] = (arr[i]*num + r)%10;
r = (arr[i]*num + r)/10;
//printf("%d ",r);
}
if(r!=0){
while(r!=0){
fact[i]=r%10;
r= r/10;
i++;
}
}
length = i-1;
}



şurda long olan değeri int ile değiştirsem bile sonucu gayet güzel veriyor. 32 ve 64 bit dışnıda ikisi de aynı datayı alabiliyormuş. kod güzel buldum galiba.
Link to comment
Sosyal ağlarda paylaş

asagi yukari yaptigi sey su;

2 adet array aciyor.

birinci array global (fact[max]) digeri lokal (arr[i ])

faktoriyel methodunun icinde 2 den baslayarak soylenilen sayiya kadar sayiyor.

her sayi icin faktoriyel methodu multiply methodunu cagiriyor.

Multiply methodu once global arrayden(eger yapilmissa su ana kadar saklanan carpimin basamaklari) lokal e kopyaliyor arrayi.

Sonra gidiyor su ana kadar ki yapilan asamaya kadar ilerliyor (length), o ilerledigi pozisyona , lokal array ile multiply in getirdigi variable i (int num) i carpip , basamagini (%10) , fact arrayine yaziyor. (yeni carpim icin komple her basamagi tek tek)

while r!=0 dongusunu anlamak icin carpim kagit nasil yapiliyor anlaman lazim.


14
11
X------
14
14
+------
154



Ayrica elindeki koddan ziyade suradaki elemanlarin yaptiklarina ve commentlerde konustuklarina bakarsan daha rahat anlarsin diye dusunuyorum.

Bazi seyleri yazmadan anlayamazsin.
Link to comment
Sosyal ağlarda paylaş

×
×
  • Yeni Oluştur...