【问题标题】:using a user input in a loop and function在循环和函数中使用用户输入
【发布时间】:2017-10-18 19:35:27
【问题描述】:

我的程序接受用户输入int n,并打印出第一个n 数量的素数。这正在按预期工作

例如。如果用户输入 8 作为 n。程序将打印:

2 3 5 7 11 13 17 19

我的问题是添加函数isPrime(n)(不允许更改)

这是我尝试过的,但我只是得到输出:

2 3 5 7 11 13 17 19  0 is not a prime number,

什么时候应该读取 2 3 5 7 11 13 17 19 8 不是质数

#include "prime.h"
#include <iostream>

int main()
{


    int n;

    std::cout << "Enter a natural number: ";
    std::cin >> n;
        for (int i = 2; n > 0; ++i)
        {
            bool  Prime = true;
            for (int j = 2; j < i; ++j)
            {
                if (i  % j == 0)
                {
                    Prime = false;
                    break;
                }
            }
            if (Prime)
            {
                --n;
                std::cout << i << " ";

            }



        }

        if (isPrime(n))
        {
            std::cout << n << " is a prime number." << std::endl;
        }
        else
        {
            std::cout << n << " is not a prime number." << std::endl;
        }

        system("pause");

    }

prime.h:

#ifndef PRIME_H_RBH300111
#define PRIME_H_RBH300111

bool isPrime(int);

#endif
#pragma once

isPrime(int)的定义

prime.cpp:

#include <cmath>

#include "prime.h"

bool isPrime(int n)
{
    if (n < 2)
    {
        return false;
    }
    else if (n == 2)
    {
        return true;
    }
    else if ((n % 2) == 0)
    {
        return false;
    }

}

我无法更改prime.cpp.h 文件 我只需要isPrime(n) 函数来处理main() 函数代码 用户输入 n,似乎没有使用数字 8。而是0 给我输出。 0 不是质数 而不是:n (8) 不是质数

【问题讨论】:

  • 您确定您了解说明吗?我怀疑您应该使用isPrime() 来测试循环中的每个数字,而不是使用您自己的设置Prime 的循环,而不是使用isPrime(n)
  • @thesitg944 你刚刚删除了一个关于素数分解代码的问题。我有一个链接here,它解释了 4 种编码方式,从未优化到极度优化。它是如何工作的,主要是为什么你只需要在你的 for 循环中寻找 n 的 sqrt。

标签: c++ function


【解决方案1】:

您正在循环中递减n。在循环退出时,n 的值为0

您可以通过以下方式解决问题:

  1. 在循环中使用另一个变量。
  2. 保留n 的副本并在循环退出后重置n 的值。

这是第二种方法:

int copyN = n;
for (int i = 2; n > 0; ++i)
{
   ...
}

n = copyN;

if (isPrime(n))
...

【讨论】:

    【解决方案2】:

    您在 for 循环中递减 n。 for 循环的条件为“n > 0”,因此当循环结束时,您知道 n 不 > 0。您可以将 n 的值保存在不同的变量中(即“int nOrig = n;”)并将其用于主要测试,或者在循环中使用不同的变量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-08
      • 2016-11-03
      • 1970-01-01
      相关资源
      最近更新 更多