【问题标题】:Program works with all inputs except for one (Prime number checker)程序适用于除一个以外的所有输入(质数检查器)
【发布时间】:2018-04-04 01:29:06
【问题描述】:

我是 C# 新手,我正在尝试学习新概念,所以我做了一个素数检查器。它可能没有它应有的效率,但我很高兴它有效。但是,每当我输入数字 4 时,它都不起作用。在所有其他数字上都可以,但在 4 上却没有。这是我的代码:

            float prime = Convert.ToSingle(Console.ReadLine());
            float divisor = prime - 1;
            float checker = prime / divisor;
            do
            {
                Console.WriteLine("checker = " + checker);
                checker = prime / divisor;
                --divisor;
            } while (checker % 1 != 0 && divisor >= 0);

            if (divisor < 1)
            {
                Console.WriteLine("{0} is a prime number.", prime);
            }
            if (checker % 1 == 0 && divisor > 1)
            {
                Console.WriteLine("{0} is not a prime number.", prime);
            }

【问题讨论】:

  • it doesn't work 几乎总是可以通过一些调试来修复
  • 所以它认为 4 是质数?
  • 不,它只是什么也没说,然后程序就结束了。

标签: c# primes


【解决方案1】:

你的逻辑有问题:

checker = prime / divisor;

检查器 = 4 / 2 => 2

while (checker % 1 != 0 && divisor >= 0)

2%1 = 0 -- 退出循环 您还有 2 个 If 条件(为什么不是 if & else)。第二个 If 条件与 Loop 结束条件不匹配。

这是我的逻辑:

float input = Convert.ToSingle(Console.ReadLine());
float factor1 = 2;
float factor2 = 0;
bool isPrime = true;

for(; factor1 < input; factor1++)
{
    factor2 = input / (float)factor1;

    if((int)factor2 == factor2)
    {
        isPrime = false;                    
        break;
    }
}

if(isPrime)
{
    Console.WriteLine($"{input} is prime.");
}
else
{                
    Console.WriteLine($"{input} is not prime. {factor1} * {factor2} = {input}");
}

【讨论】:

    【解决方案2】:

    您的if 语句条件都不满足4。将您的第二个if 语句更改为else,这样如果您的第一个语句未执行,则始终执行else 语句的逻辑。

     if (divisor < 1)
     {
         Console.WriteLine("{0} is a prime number.", prime);
     }
     else
     {
         Console.WriteLine("{0} is not a prime number.", prime);
     }
    

    【讨论】:

      猜你喜欢
      • 2016-04-22
      • 2018-07-23
      • 1970-01-01
      • 2013-08-09
      • 1970-01-01
      • 1970-01-01
      • 2013-11-21
      • 2011-08-11
      • 1970-01-01
      相关资源
      最近更新 更多