繁体   English   中英

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

[英]An error with Floating Point Exception C++ expression

我是C ++的初学者,尝试获取110之类的数字。我尝试了以下代码,但出现了Floating Point Exception C ++错误。 我不明白哪里出了问题。

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

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

您的问题是模数是余数,如果您从数学角度考虑正在做的事情是没有意义的。 当您将一个数字除以另一个数字时,有余数或没有余数。 只要有剩余或没有剩余,您就将继续循环。 这导致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

我怀疑不是您想要的,而是只想要第一个数字,因此您需要将输出除以十的前次幂,如下所示:

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

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

首先,您的代码会陷入无限循环。 我修改了程序,以便在每一步之后都打印p。 输出为:
在此处输入图片说明
您不能使用0作为第二个操作数来进行%运算。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM