Actuellement, j'ai cet ensemble de code et son but est de calculer les factorielles.
int numberInt = int.Parse(factorialNumberTextBox.Text);
for (int i = 1; i < numberInt; i++)
{
numberInt = numberInt * i;
}
factorialAnswerTextBox.Text = numberInt.ToString();
Pour une raison quelconque, cela ne fonctionne pas et je ne sais pas pourquoi. Par exemple, j'entrerai 3 et j'obtiendrai la réponse -458131456, ce qui semble vraiment étrange.
Toute aide appréciée. Merci
int numberInt = int.Parse(factorialNumberTextBox.Text);
int result = numberInt;
for (int i = 1; i < numberInt; i++)
{
result = result * i;
}
factorialAnswerTextBox.Text = result.ToString();
sur une note secondaire: ce ne serait normalement pas la bonne façon de calculer les factorielles. Vous aurez besoin d'une vérification de l'entrée avant de pouvoir commencer le calcul, dans le cas où votre valeur de départ est 1 ou inférieure, dans ce cas, vous devez retourner manuellement 1.
Sur une autre note: c'est également un exemple parfait de cas où les méthodes récursives peuvent être utiles.
int Factorial(int i)
{
if (i <= 1)
return 1;
return i * Factorial(i - 1);
}
Un peu tard pour la fête:
Func<int, int> factorial = n => n == 0 ? 1 :
Enumerable.Range(1, n).Aggregate((acc, x) => acc * x);
Vous pouvez utiliser cette solution (plutôt élégante):
Func<int, int> factorial = null;
factorial = x => x <= 1 ? 1 : x * factorial(x-1);
int numberInt = int.Parse(factorialNumberTextBox.Text);
factorialAnswerTextBox.Text = factorial(numberInt).ToString();
public static int Factorial(int facno)
{
int temno = 1;
for (int i = 1; i <= facno; i++)
{
temno = temno * i;
}
return temno;
}
je suis en retard à la fête mais le voici
public ulong Factorial(uint numb)
{
if (numb <= 1) return 1;
ulong final = 1;
for (uint i = 1; i <= numb; i++)
{
final *= i;
}
return final;
}
Remarque:
J'ai utilisé des types non signés pour une meilleure portée
car cela calcule jusqu'à Factorial (65), tandis que les types signés normaux donneront des valeurs négatives
Essayer de faire une solution plus à l'épreuve des balles pour n factorielle. En voici une qui protège des débordements, ainsi que des valeurs négatives et nulles de n. L'utilisation d'une variable de résultat de type long (au lieu de int) permet de calculer des valeurs "plus grandes" (pour long, vous pouvez calculer jusqu'à n = 20 inclus).
Ce code renvoie 0 si un débordement s'est produit, mais vous pouvez le modifier pour faire ce qui est plus approprié.
static long nFactorial(int n)
{
if (n <= 1)
{
return 1;
}
long result = 1;
try
{
for (int i = 1; i <= n; i++)
{
result = checked(result * i);
}
}
catch (OverflowException)
{
return 0;
}
return result;
}
static void Main()
{
int numberFactorial = int.Parse(Console.ReadLine());
int result = numberFactorial;
for (int i = 1; i < numberFactorial; i++)
{
result = result * i;
Console.WriteLine("{0}*{1}",numberFactorial,i);
}
Console.WriteLine(result);
}
Essaye ça,
int numberInt = int.Parse(textBox1.Text);
int answer = 1;
for (int i = 1; i <= numberInt; i++)
{
answer = answer * i;
}
textBox1.Text = answer.ToString();
J'ai dû créer une méthode factorielle pour calculer les combinaisons et j'ai trébuché sur le fait que les factorielles deviennent très grandes très rapidement avec des entrées relativement petites. Voici ma solution sans utiliser la récursivité pour éviter le débordement de pile et implémentée à l'aide de System.Numerics.BigInteger
.
static BigInteger factorial(int num) {
BigInteger result = 1;
while (num > 1) {
result *= num--;
}
return result;
}
Évidemment, vous pouvez également utiliser BigInteger
pour l'entrée, mais mon cas d'utilisation était que je traitais des valeurs de int
.
Une belle solution factorielle pour votre belle soirée.
int num = Convert.ToInt32(Console.ReadLine());
int fact = 1;
for (int i = num; i > 0; --i)
fact *= i;
Console.WriteLine(fact);
utiliser la fonction factorielle:
static long Factorial(long number)
{
if( number <= 1 )
return 1;
else
return number * Factorial(number - 1);
}
puis appelez la fonction:
long result = Factorial(int.Parse(factorialNumberTextBox.Text));
factorialAnswerTextBox.Text = result.ToString();
int numberInt=1 ;
for (int i = 1; i <= int.Parse(factorialNumberTextBox.Text); i++)
{
numberInt = numberInt * i;
}
factorialNumberTextBox.Text = numberInt.ToString();
Deux méthodes sont implémentées: récursive et basique calcul factoriel.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication50
{
class Program
{
static void Main(string[] args)
{
NumberManipulator manipulator = new NumberManipulator();
Console.WriteLine("Please Enter Factorial Number:");
int a= Convert.ToInt32(Console.ReadLine());
Console.WriteLine("---Basic Calling--");
Console.WriteLine("Factorial of {0} is: {1}" ,a, manipulator.factorial(a));
Console.WriteLine("--Recursively Calling--");
Console.WriteLine("Factorial of {0} is: {1}", a, manipulator.recursively(a));
Console.ReadLine();
}
}
class NumberManipulator
{
public int factorial(int num)
{
int result=1;
int b = 1;
do
{
result = result * b;
Console.WriteLine(result);
b++;
} while (num >= b);
return result;
}
public int recursively(int num)
{
if (num <= 1)
{
return 1;
}
else
{
return recursively(num - 1) * num;
}
}
}
}