【问题标题】:Finding if number is prime in C# [duplicate]在C#中查找数字是否为素数[重复]
【发布时间】:2023-04-05 07:42:01
【问题描述】:

我正在尝试使用 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();
    }
}

【问题讨论】:

  • 你应该看看多长 u = Console.Read();返回,我怀疑你会想要将字符串解析为整数。
  • @DmitryBychenko - 算法很好。这是效率最低但正确的方法之一。
  • 您是否考虑过任何方法来弄清楚它如何或为什么不起作用?
  • 轻松处理反对票和关闭请求。 OP 在实现他的算法方面做出了不错的尝试。

标签: c# primes


【解决方案1】:

Console.Read 从标准输入流中读取下一个字符,并返回其代码点。这与其整数值不同。例如,字符'7' 的代码点是55。此外,Read 只考虑单个字符;因此,当您键入13 时,它只会返回'1' 的代码点。

您应该使用ReadLine 而不是Read,它将从标准输入读取整行字符(即直到用户按下“Enter”)并将它们作为字符串返回。然后,您可以使用其Parse 方法将此字符串转换为长值。

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!");

【讨论】:

  • 注意最好使用long.TryParse而不是Parse来防止异常FormatException
  • @Selman22:你是对的;当您发表评论时,我正在将其纳入我的回答中。
【解决方案2】:

Console.Read() 从输入中读取一个字符并将其转换为长整数。它不读取数字。

修改你的代码为:

    string input = Console.ReadLine();
    long u = long.Parse(input);

【讨论】:

  • 这似乎有效,谢谢!
猜你喜欢
  • 2011-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-22
  • 1970-01-01
  • 1970-01-01
  • 2020-09-20
  • 2015-09-30
相关资源
最近更新 更多