2013-10-24 4 views
0

Я пытаюсь получить факториал, которое будет отображаться как, например, (факториал-равно 5 * 4 * 3 * 2 * 1)C# консоли Выход Форматирование

Я использую метод факториала, но он не принимает строку Console.Write(i + " x "); в моем коде.

Любая помощь будет замечательной. вот мой код.

//this method asks the user to enter a number and returns the factorial of that number 
static double Factorial() 
{ 
    string number_str; 
    double factorial = 1; 

    Console.WriteLine("Please enter number"); 
    number_str = Console.ReadLine(); 

    int num = Convert.ToInt32(number_str); 

    // If statement is used so when the user inputs 0, INVALID is outputed 
    if (num <= 0) 
    { 
     Console.WriteLine("You have entered an invalid option"); 
     Console.WriteLine("Please enter a number"); 
     number_str = Console.ReadLine(); 

     num = Convert.ToInt32(number_str); 
     //Console.Clear(); 
     //topmenu(); 
     //number_str = Console.ReadLine(); 
    } 

    if (num >= 0) 
    { 
     while (num != 0) 
     { 
      for (int i = num; i >= 1; i--) 
      { 
       factorial = factorial * i; 
      } 
      Console.Write(i + " x "); 

      Console.Clear(); 
      Console.WriteLine("factorial of " + number_str.ToString() + " is " + factorial); 
      factorial = 1; 
      Console.WriteLine("(please any key to return to main menu)"); 
      Console.ReadKey(); 
      Console.Clear(); 
      topmenu(); 
     } 
    } 

    return factorial; 
} 

Спасибо!

+2

«i' является« целым числом », вы должны установить его как' string': 'Console.Write (i.ToString() +" x ");' – Tico

+1

'string.Join (" * ", Enumerable .Range (1, 5)) 'is' 1 * 2 * 3 * 4 * 5' –

+0

@TimS. Как это будет * вычислять факториал? –

ответ

5

Проблема заключается в том, что цикл for не использует фигурные скобки, поэтому область видимости - всего одна строка.

брекеты Попробуйте добавить надлежащий:

for (int i = num; i >= 1; i--) 
{ 
    factorial = factorial * i; 
    Console.Write(i.ToString() + " x "); 
} 

Console.WriteLine("factorial of " + number_str.ToString() + " is " + factorial);  

Без скобок, переменная i не существует только на следующем утверждении (factorial = factorial * i;), и больше не существует в сфере к тому времени вы называете Console.Write.

Вы также можете удалить звонок по номеру Console.Clear сразу после этого Write или вы его не увидите.

+1

Не следует ли подразумевать вызов toString? 'Console.Write (1 +" foo ");' будет компилироваться без проблем. –

+0

@PrestonGuillot Да - быть глупым - отредактировано, чтобы исправить (и показать «настоящую» проблему. –

1

вот решение рассмотреть

public static void Main() 
{ 
    Console.WriteLine("Please enter number"); 

    int input; 
    while (!int.TryParse(Console.ReadLine(), out input) || input <= 0) 
    { 
     Console.WriteLine("You have enter an invald option"); 
     Console.WriteLine("Please enter number"); 
    } 

    Console.Write("Factorial of " + input + " is : "); 

    int output = 1; 
    for (int i = input; i > 0; i--) 
    { 
     Console.Write((i == input) ? i.ToString() : "*" + i); 
     output *= i; 
    } 
    Console.Write(" = " +output); 
    Console.ReadLine(); 
} 

int.TryParse() будет полезным для вас, так что программа не вылетать, если пользователь вводит Нецелочисленные

также вы можете хотите чего-то, кроме целого. Факториалы становятся очень большими очень быстро - ничего более 16 вернет неправильный результат.

+0

Это фактически не вычисляет или не печатает факториал ... –

+0

обновил его соответственно – Jonesopolis

Смежные вопросы