2013-04-21 72 views
0

我想写一个代码,找到比用户的输入更低的完美数字。 样品正确的输出的:为什么我会收到错误“浮点异常”?

输入正整数:100
图6是一个完全数
28被完全数
没有更多完全数小于或等于100

但是当我运行我的代码时,出现错误Floating point exception

并且找不到原因。我究竟做错了什么?

这里是我的代码:

#include <iostream> 

using namespace std; 

bool isAFactor(int, int); 

int main(){ 
    int x, y; 
    int countOut, countIn; 
    int userIn; 
    int perfect = 0; 

    cout << "Enter a positive integer: "; 
    cin >> userIn; 

    for(countOut = 0; countOut < userIn; countOut++){ 
     for(countIn = 1; countIn <= countOut; countIn++){ 
      if(isAFactor(countOut, countIn) == true){ 
       countOut = countOut + perfect; 
      } 
     } 

     if(perfect == countOut){ 
      cout << perfect << " is a perfect number" << endl; 
     } 

     perfect++; 
    } 

    cout << "There are no more perfect numbers less than or equal to " << userIn << endl; 

    return 0; 
} 


bool isAFactor(int inner, int outer){ 
    if(outer % inner == 0){ 
     return true; 
    } 

    else{ 
     return false; 
    } 
} 
+7

您正在计算x%0. – 2013-04-21 17:42:07

+3

如果您发布了真实的错误消息,这将有所帮助。我很确定没有编译器会说“接受”。在代码中只有整数的浮点错误也有点奇怪。 – 2013-04-21 17:42:45

+0

“浮点收集” 计算进行到x%1。不是吗? 奇怪的是,只有int和bool值才得到该错误消息。这就是为什么我问这个问题:P – user2304913 2013-04-21 18:03:56

回答

0

可以打电话来澄清@Aki Suihkonen的评论,表演时: outer % inner 如果inner是零,你会得到一个被零除错误。

这可以通过调用isAFactor(0, 1)来追溯。
它在mainfor循环中。

isAFactor(countOut, countIn)的第一个参数被分配在最外层for循环: for (countOut = 0; ...

通知您与初始化countOut值。

编辑1:

Change your `isAFactor` function to: 

    if (inner == 0) 
    { 
     cerr << "Divide by zero.\n"; 
     cerr.flush(); 
     return 0; 
    } 
    if (outer % inner ... 

在高于任一cerr线断点。
当执行停止时,请查看堆栈跟踪。一个好的调试器也可以让你检查跟踪中每个点的参数/值。

+0

我已经更改'布尔isAFactor(int内部,int外部)'为'isAFactor(int outer,int inner)',所以它不再是零。但是会显示相同的错误消息。 – user2304913 2013-04-21 18:36:17

+0

看我的**编辑1:**。使用调试器。 – 2013-04-21 18:47:43

+0

谢谢,我现在可以看到问题所在。但我仍不明白为什么它除以零。我甚至试过'if(inner == 0){inner ++;}' – user2304913 2013-04-21 19:18:50

1

的参数只是交换。您呼叫的功能isAFactor(countOut, countIn)时,你应该isAFactor(countIn, countOut)

+0

我试过了,仍然给出同样的错误...谢谢你的建议 – user2304913 2013-04-21 18:18:29

+0

我将isAFactor改为isAFactor (int outer,int inner)但它仍然不工作....仍然是相同的错误 – user2304913 2013-04-21 18:27:06

相关问题