由于divide语句,c ++中的浮点异常

时间:2017-08-20 09:07:24

标签: c++ floating-point-exceptions

我搜索了谷歌,但我无法找到问题的解决方案。 这是我的代码 -

#include <bits/stdc++.h>
#include<algorithm>
#include<cstdlib>
#include<cstdio>

using namespace std;

long long buyMaximumProducts(int n, long k, vector <int> a) {
    // Complete this function
    vector<pair<int, int>> p;
    long i;
    for(i=0; i<n; i++) {
        p.push_back(make_pair(a[i], i+1));
    }

    sort(p.begin(), p.end());

    if(k < p[0].first)
        return 0;

    long long sum=0,stocks=0;

    for(i=0;i<n;i++)
    {
        if((sum+p[i].first*p[i].second) <= k)
        {
            sum+=p[i].first*p[i].second;
            stocks+=p[i].second;
        } 
        else 
            break; 
    }

    long long amtleft=k-sum;
    **stocks+=(long long)(amtleft/p[i].first);**
    return stocks;

}

int main() {
    int n;
    cin >> n;
    vector<int> arr(n);
    for(int arr_i = 0; arr_i < n; arr_i++){
       cin >> arr[arr_i];
    }
    long long k;
    cin >> k;
    long long result = buyMaximumProducts(n, k, arr);
    cout << result << endl;
    return 0;
}

我得到了浮点异常。我认为错误是因为明星声明而来。谁能告诉我可能是什么原因以及如何将其删除?

1 个答案:

答案 0 :(得分:0)

程序包含至少3个故障。

long long k;
cin >> k;
long long result = buyMaximumProducts(n, k, arr);

long long buyMaximumProducts(int n, long k, vector <int> a) {

k是'long long'但参数k只是'long'。

for(i=0;i<n;i++) {
    if((sum+p[i].first*p[i].second) <= k) {
        sum+=p[i].first*p[i].second;
        stocks+=p[i].second;
    } else 
        break; 
}

如果我们从未达到'休息'那么'我'对

无效
stocks+=(long long)(amtleft/p[i].first);

导致异常。

如果

p[i].first

为零,你得到除以零的异常。