2014-12-07 73 views
0

我最近开始学习C++,并且正在尝试编写一个程序,在该程序中,我将给定的任意大小的整数作为输入,然后找到这个数字中的数字,整数。这些数字的计数显示为结果。即使在检查是否除零之后浮点异常

#include <cmath> 
#include <cstdio> 
#include <vector> 
#include <iostream> 
#include <algorithm> 
using namespace std; 


int main() { 
int n; //Number of Integers to take as input 
cin>>n; 
vector<int> a; 
for(int i=0;i<n;i++){ 
    long long val; 
    cin>>val; 
    a.push_back(val); 
} 
for(int i=0;i<n;i++){ 
    int k=1,count=0,r,q; 
    r=a[i]; 
    q=a[i]; 
    while(k==1){ 
     q/=10; 
     r=q%10;   
     if(a[i]%r==0 && r>=1) 
      count++; 
     if(q<10 && q>=1){ 
      if(a[i]%q==0) 
       count++; 
      k=0; 
      } 
     if(q==0) 
      k=0; 
    } 
    cout<<count<<"\n"; 
} 

return 0; 
} 

上面的代码作品整数WITHOUT数字“0”但是当我使用具有0作为一个数字的任何整数,这显示:

错误 浮点异常(核心转储)

我试着修改代码,试图跳过数字,只要'r'或'q'等于'0'但似乎没有任何工作。 任何帮助/意见,将不胜感激!

回答

2

r0,这样的:

if(a[i]%r==0 && r>=1) 

不会工作,因为a[i]%r无法评估(模0将需要被0除待定义)。它试图在r>=1被检查之前评估分区。如果你重新安排它像

if(r >= 1 && a[i] % r == 0) 

那么它应该工作,因为出来后&&运营商短路r >= 1已被确定为false

+0

谢谢,不知道条件的安排会改变结果。 – 2014-12-07 13:39:51