这个程序有限制吗?

时间:2013-12-31 03:32:43

标签: c++

我遇到此代码的问题。虽然它应该说这个数字不是素数,因为我把一个非常大的数字,我知道是非主要的(252345435465,甚至1000000000000作为一个例子),它说明这个数字是素数。

#include "stdafx.h"
#include <iostream>
#include <cmath>

using namespace std;

int main() {
int n;
int i;
int prime = true;

cout << "Type in a number and press ENTER: ";
cin >> n;

i = 2;
while (i <= sqrt(n)) {
    if (n % i == 0) {
        prime = false;
        break;
    }
    i++;
}

if (prime)
    cout << "The number is prime" << endl;
else
    cout << "The number is NOT prime" << endl;

system("PAUSE");
    return 0;
}

我有什么问题吗?

3 个答案:

答案 0 :(得分:2)

您输入的值太大而无法容纳int。它们溢出了signed int的32位限制(-2147483648到2147483647)。

答案 1 :(得分:2)

首先,为了避免包含非标准标题<stdafx.h>,只需关闭Visual C ++项目中的预编译标题(右键单击项目,然后单击属性)。

主要问题是您输入的值太大而不适合int类型。

要检测到这一点,只需在输入操作后检查流的状态:

#include <iostream>
#include <stdlib.h>  // EXIT_FAILURE
#include <cmath>

using namespace std;

int main() {
int n;
int i;
int prime = true;

cout << "Type in a number and press ENTER: ";
cin >> n;
if( cin.fail() )
{
    cout << "Sorry, that's not a valid `int` number." << endl;
    return EXIT_FAILURE;
}

i = 2;
while (i <= sqrt(n)) {
    if (n % i == 0) {
        prime = false;
        break;
    }
    i++;
}

if (prime)
    cout << "The number is prime" << endl;
else
    cout << "The number is NOT prime" << endl;

system("PAUSE");
    return 0;
}

答案 2 :(得分:1)

32位signed int可以取-2,147,483,648到2,147,483,647之间的值范围。你的号码太大了。

使用更合适的变量类型,或仅输入您正在使用的变量范围内的数字。

有关C ++数据类型及其范围的更多信息,请参阅this answer