Nem találom mit csináltam rosszul. Mi a hiba? (C#)
static void Main(string[] args)
{
int kartyaszam = 6;
int deck = 30;
int kor = 15;
long esely = ((Faktorialis(deck - kartyaszam)) / (Faktorialis(kor - kartyaszam) * ( Faktorialis( (deck - kartyaszam) - (kor - kartyaszam) ) ))) / (Faktorialis(deck) / (Faktorialis(deck) * Faktorialis(deck - kor)));
Console.WriteLine(esely+"%");
Console.ReadKey();
}
static int Faktorialis(int number)
{
int hatar = number;
for (int x = 1; x < hatar; x++)
{
number *= x;
}
return number;
}
Remélem nem csúszott szét nagyon. A hiba hogy elvileg valahol 0-val oszt. Előre is köszönöm
Ráadásul a faktoriális számolásod is marhaság, még nagyobb számot kapsz, mint kellene.
Tesztelni felétek nem szokás?
Ekkora egész számokhoz próbáld ki pl. a BigIntegert. [link]
Továbbá ha a szám 1 vagy kisebb, akkor az eredmény 1. És rekurziót is lehet alkalmazni, valahogy így:
int Faktorialis(int i)
{
if (i <= 1)
return 1;
return i * Faktorialis(i - 1);
}
Egyrészt: Borzalmas számolási mechanika, javaslom vegyél elő papírt, ceruzát, és vezesd le a kombinatorikai műveleteket, és meglátod, hogy lehet sokkal egyszerűbben is.
Másrészt ez van a fő osztás jobboldalán:
Faktorialis(deck)
/
(Faktorialis(deck) * Faktorialis(deck - kor))
Ez pedig integer esetén egy nagy nulla lesz, mivel a jobboldali szám elkerülhetetlenül nagyobb lesz a baloldalinál.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!