浮点异常C ++表达式出错

时间:2018-05-06 18:48:13

标签: c++ while-loop floating-point

我是C ++的初学者并尝试获取110之类的数字。我尝试了以下代码,但得到了浮点异常C ++错误。我无法理解出了什么问题。

  int main()
{
 int p = 10;
 int j = 1;
while(110 % p >=1 || 110 % p ==0){
    cout<<110 % p;
    j++;
    p = p *10;
}
}

任何人都可以更正代码吗?

2 个答案:

答案 0 :(得分:3)

你遇到的问题是你的模数是一个余数,如果你在数学上思考你正在做什么它是没有意义的。当你将一个数字分成另一个数字时,有一个余数,或者没有。只要存在或不存在余数,您就会继续循环。这导致p上的整数溢出。

试试这个:

#include <iostream>

using namespace::std;

int main()
{
  // this prints out the digits backwards:
  for(int InitialNumber=110;InitialNumber!=0;InitialNumber/=10){
    int LastDigit=InitialNumber%10;
    cout<<LastDigit<<endl;
  }
  return 0;
}

输出:

martyn@localhost ~ $ g++ test.cpp -std=c++11
martyn@localhost ~ $ ./a.out 
0
1
1

如果你坚持使用你的算法,你可以这样终止它:

int main()
{
  int p = 10;
  int j = 1;
  while( p < 110*10 ){
    cout<<110 % p<<endl;
    j++;
    p = p *10;
  }
}

这会阻止循环继续前进并溢出P.而这会给你:

martyn@localhost ~ $ ./a.out 
0
10
110

我怀疑这不是你想要的,而是你想要的第一个数字,所以你需要将输出除以之前的10的幂,如下所示:

int main()
{
  int p = 10;
  while( p < 110*10 ){
    cout<<(110 % p)/(p/10)<<endl;
    p = p * 10;
  }
}

这会给你:

martyn@localhost ~ $ g++ test.cpp -std=c++11
martyn@localhost ~ $ ./a.out 
0
1
1

但我怀疑第一段代码摘录更优雅。请注意,在所有这些示例中,数字都是从前面打印出来的。这可能不是你想要的。

答案 1 :(得分:-1)

首先,您的代码会遇到无限循环。 我修改了你的程序,在每一步之后打印p。 输出是:
enter image description here
你不能用%作为第二个操作数进行%操作。