2014-12-07 71 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