我试图显示一个因子(例如5的因子是5 * 4 * 3 * 2 * 1)
我正在使用factorial的方法,但它不接受我的代码中的行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;
}
谢谢!
答案 0 :(得分: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 :(得分: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的任何东西都会返回错误的结果。