嗨!我正在尝试生成素数,但我的条件i%i是产生错误.
我收到错误"尝试除以零".
我该怎么解决这个问题?
int a, n, i;
Console.WriteLine("Enter ur number");
n = Convert.ToInt32(Console.ReadLine());
for (i = 0; i <= n; i++)
{
if ((i % 2 == 0) && (i % i == 0))
{
a = i;
Console.WriteLine("The prime numbers are", a);
}
}
Console.ReadLine();
Run Code Online (Sandbox Code Playgroud)
希望很快听到你的意见......
Dav*_*nan 13
当i为零时,第一次绕过你正在进行的循环会0 % 0导致除零误差.
至于你的功能试图做什么,我不知道.我在这里看不到任何与素数有关的东西.你只是发现所有偶数小于n.
我们来看看if测试:
if ((i % 2 == 0) && (i % i == 0))
Run Code Online (Sandbox Code Playgroud)
第二部分,i % i == 0只要i不是,就永远是真的0.那部分是虚假的.并i % 2 == 0简单地测试是否i是偶数.
您的代码实际上打算做什么?你想测试一个数字是否是素数?如果是这样,最简单的方法是这样的:
static bool isPrime(int n)
{
Debug.Assert(n>0);
for (int i=2; i<n; i++)
if (n % i == 0) // n is exactly divisible by i, so n is not prime
return false;
return true; // we could not find a factor, so n must be prime
}
Run Code Online (Sandbox Code Playgroud)
您当前的代码无法输出任何数字,因为您的调用Console.WriteLine不太正确.你的意思是:
Console.WriteLine("The prime numbers are: {0}", a);
Run Code Online (Sandbox Code Playgroud)
另一个要点是您的代码版本将primality test与I/O代码混合在一起.在一个大的例程中将它们混合在一起使您更难理解和调试代码.将素性测试拆分为单独的函数,如我在此处所示,您可以更轻松地检查其正确性.一旦知道它是正确的,就可以从IO代码中使用它.然后您可以集中精力使您的IO代码正确.这看起来像这样:
Console.Write("Enter your number: ");
int n = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("The prime numbers are:");
for (int i = 1; i <= n; i++)
if (isPrime(i))
Console.WriteLine(i);
Console.ReadLine();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3677 次 |
| 最近记录: |