我是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;
}
}
任何人都可以更正代码吗?
答案 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)