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


Öne çıkan mesajlar

Mesaj tarihi:
Beyler bonus projesi. Nası hesaplatacağım? İnternette kayda değer bir şey bulamadım. iostream headerını kullanarak yapılan bir kaç şey var ama işlenmeyen bir headerı kullanarak proje versem çıkmaz.

Yardımcı olacak biri var mıdır?
Mesaj tarihi:
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
Mesaj tarihi:
O zaman kendi class'ını yazacan mecbur. unsigned long'ları linked list şeklinde tutup taşmaları bilmem neleri buna göre ayarlayabilirsin gibi. Hem faktoriyel yaptığın için signed muhabbetiyle uğraşmana da gerek yok.

Ha implemantasyonu nasıl olur dersen şimdi onu bilemedim sdf
Mesaj tarihi:
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
Mesaj tarihi:
1000liği şöyleymiş


i=2999; //start from end of array.
numArr[2999]=1;

for(count=2;count<=1000;count++)
{
while(i>0)
{
total=numArr[i]*count+rem;
rem=0;
if(total>9)
{
numArr[i]=total%10;
rem=total/10;
}
else
numArr[i]=total;
i--;
}
rem=0;
total=0;
i=2999;
}
Mesaj tarihi:

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.
Mesaj tarihi:
yalnız şöyle bir sıkıntı var, fonksiyonlarda ne yaptığını çözemedim. multiply da array'e mi atıp çarpıyor? length napıyor bir de, yukarıda 0'a eşit olarak tanımlanmış, for looplarından i 0'dan lenght'e kadar gitsin diyor length hep 0 ama?
Mesaj tarihi:
olay divide and conquer.

genede n! icin komple n-1 n-2 n-3... 1 e kadar carpacagina atiyorum tek sayilari ayri, cift sayilari ayri hesaplatip kenara koyup sonra onlari ayri carptirabilirsin.

en son ne kadar buyuk bi faktoriyel hesaplamak istiyorsan o kadar bolersin.
Mesaj tarihi:
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.
×
×
  • Yeni Oluştur...