我正在尝试使用C#查找数字是否为素数。我写了代码。它应该工作,但由于某种原因它似乎没有。
这是我的代码(我尝试输入7,13等,说它们不是素数):
class Program
{
static void Main(string[] args)
{
long u = Console.Read();
primefinder(u);
Console.ReadLine();
}
private static void primefinder(long a)
{
long counter = 0;
for (long b = 1; b <= a; b++)
{
if ((a % b) == 0)
{
counter++;
}
}
if (counter == 2)
{
Console.WriteLine("Is prime!");
}
else
{
Console.WriteLine("Is not prime");
}
Console.ReadLine();
}
}
答案 0 :(得分:8)
Console.Read
从标准输入流中读取下一个字符,并返回其代码点。这与其整数值不同。例如,字符'7'
的代码点为55
。此外,Read
仅考虑单个字符;因此,当您键入13
时,它只会返回'1'
的代码点。
而不是Read
,您应该使用ReadLine
,它将从标准输入读取整行字符(即,直到用户按下“Enter”)并将其作为字符串返回。然后,您可以使用其Parse
方法将此字符串转换为long值。
long u = long.Parse(Console.ReadLine());
如果您想在用户输入错误输入(例如字母而非数字)时避免出现异常,则应使用TryParse
:
string s = Console.ReadLine();
long u;
if (long.TryParse(s, out u))
primefinder(u);
else
Console.WriteLine("Your input was not a valid number!");
答案 1 :(得分:1)
Console.Read()
从输入中读取一个字符,然后将其转换为long。它没有读数字。
将您的代码修改为:
string input = Console.ReadLine();
long u = long.Parse(input);