c++ - 找不到浮点异常
问题描述
此代码显示浮点异常。我知道为什么会发生此错误,但我无法在此代码中找到错误。
#include<bits/stdc++.h>
using namespace std;
typedef long long int ll;
#define MAX 10005
vector<int> build_sieve() {
bool arr[MAX];
for(int i=2;i<=MAX-1;i++) {
arr[i]=true;
}
arr[0]=false;
arr[1]=false;
for(int i=2;i*i<=MAX-1;i++) {
if(arr[i]==true){
for(int j=i*i;j<=MAX-1;j=j+i) {
arr[j]=false;
}
}
}
vector<int> v;
for(int i=2;i<=MAX-1;i++) {
if(arr[i]==true){
v.push_back(i);
}
}
return v;
}
int main() {
// int t;
// cin>>t;
vector<int> v = build_sieve();
cout<<"Prime no.s"<<endl;
for(auto i = v.begin();i!=v.end();i++) {
cout<<*i<<" ";
}
int t;
cin>>t;
while(t--) {
int n,len;
cin>>n>>len;
ll arr[len];
for(int i=0;i<=len-1;i++) {
cin>>arr[i];
}
set<ll> s;
for(int i=0;v[i]<=n&&i<=100001;i++) {
for(int j=0;j<=len-1;j++) {
if((arr[j]%v[i])==0) {
s.insert(v[i]);
cout<<v[i]<<" "<<arr[j]/v[i]<<endl;
s.insert(arr[j]/v[i]);
}
}
}
cout<<s.size()<<endl;
}
}
解决方案
一些系统报告整数除以零的浮点异常。那么您的代码如何获得其中之一呢?你除以v[i]
(模运算符%
是一个除法)。怎么可能v[i]
是零?因为您正在访问v
向量的末端。
当您构造v
素数列表时,您只添加小于 的数字MAX
,即 10005。但是,在您的 for 循环中main
,您将自己限制为更大的索引 ( i <= 100001
),这是素数的计数,而不是主要。一旦你超过了结束v
,你就会进入未定义的行为,这最终会导致异常。
推荐阅读
- html - 图片未显示在 jerkyll 博客文章中
- python - 如何仅从 Python 日期时间对象获取日期
- java - 通过从数据库中获取邮件结构在 JAVA 中发送邮件
- flutter - Flutter - 屏幕焦点在某个小部件上
- c# - 在visual studio c# release 中包含多媒体资源
- c++ - 在计算中使用 2 的幂有多有利可图?
- azure-ad-b2c - Azure AD B2C 密码重置流程自定义布局密码验证无法正常工作
- c++ - 读取文件最后一行并输入到 Linklist 时出错
- node.js - 如何使用 Express/got 代理/流式传输 HTTPS 请求?
- excel - 如何在不拖动的情况下将公式添加到该行中的多个单元格?