Исключение с плавающей точкой в ​​c ++ из-за оператора деления

Я искал в Google, но мне не удалось найти решение моей проблемы.
Вот мой код

#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;
}

Я получаю исключение с плавающей запятой. Я думаю, что ошибка идет из-за заявления звезды. Может кто-нибудь подсказать, в чем может быть правдоподобная причина и как ее убрать?

-2

Решение

Программа содержит как минимум 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

ноль, вы получите деление на ноль исключения.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]