首页 新闻 会员 周边

DEV-CPP编译sqrt函数没有通过,求解?

0
[待解决问题]
#include <iostream>
#include <cmath>

using namespace std;

//函数在调用之前必须先声明
bool prime(int n);

int main()
{
    int i;
    
    //设置一个死循环,当用户输入0的时候终止循环
    
    while (true)
    {
          cout << "请输入一个数字,并按Enter。";
          cin >> i;
          if (i == 0)
          {
                break;
          } 
          if (prime(i))
          {
                       cout << i << " 是质数." << endl; 
          }
          else 
          {
               cout << i << " 不是质数。" << endl;
          }
    } 
    
    system ("PAUSE");
    return 0; 
} 

bool prime(int n)
{
      int i;
      
      for (i = 2; i <= sqrt(n); i++)
      {
          if (n % i == 0)
          {
                return false;
          }
      }
      return true; 
}
waynewuzhenbo的主页 waynewuzhenbo | 初学一级 | 园豆:189
提问于:2013-11-29 23:16
< >
分享
所有回答(5)
0

程序是对的,我也用了DEV-CPP,可以通过。应该是你的编译器问题。

lzyer | 园豆:130 (初学一级) | 2013-12-01 13:25

谢谢,我再试试。

支持(0) 反对(0) waynewuzhenbo | 园豆:189 (初学一级) | 2013-12-04 09:28

4.9.9.2这个版本可以通过编译,4.9.8.0这个版本不行。老版本通过如下修改也可以通过编译(目前还不知道为什么?):i <= sqrt(n); ----〉i <= sqrt(double(n));

支持(0) 反对(0) waynewuzhenbo | 园豆:189 (初学一级) | 2014-10-14 09:12
0

检查是不是在链接的时候没有链接相应的数学处理lib。

告诉 | 园豆:285 (菜鸟二级) | 2013-12-02 14:40

xiexie

支持(0) 反对(0) waynewuzhenbo | 园豆:189 (初学一级) | 2013-12-04 09:28
0

for (i = 2; i <= sqrt(n); i++)

这个习惯不太好,因为每次循环都要计算sqrt(n),这个没必要的,

在for循环之前先把sqrt(n)赋给一个量,减少计算量。

永久指针 | 园豆:195 (初学一级) | 2014-01-11 21:52
0

4.9.9.2这个版本可以通过编译,4.9.8.0这个版本不行。老版本通过如下修改也可以通过编译(目前还不知道为什么?):i <= sqrt(n); ----〉i <= sqrt(double(n));

waynewuzhenbo | 园豆:189 (初学一级) | 2014-10-14 09:12
0

首先,用DEV-C++5.11(我的编译器版本)是可以通过编译的。你肯定用的是老版本。

其次,不论这个编译器版本的问题,你的判断素数程序也是错误的。要特判一下1这个数,因为1不是素数啊。。

加上这行:

if(n == 1) return false;
Aehnuwx | 园豆:263 (菜鸟二级) | 2018-07-10 13:21
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册