[英]Floating point exception even after checking if divided by zero
我最近開始學習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;
}
上面的代碼適用於沒有數字'0'的整數,但是當我使用任何具有0作為數字的整數時,將顯示:
錯誤浮點異常(核心已轉儲)
我嘗試通過在“ r”或“ q”等於“ 0”時跳過數字來嘗試修改代碼,但似乎沒有任何效果。 任何幫助/建議將不勝感激!
當r
為0
時:
if(a[i]%r==0 && r>=1)
將無法使用,因為無法評估a[i]%r
(取模0將需要定義除以0)。 它會在檢查r>=1
之前嘗試評估除法。 如果你像這樣重新排列
if(r >= 1 && a[i] % r == 0)
那么它應該起作用,因為在確定r >= 1
為false
之后, &&
運算符會短路。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.