


Действительные числа,с++, без ООП
Друзья, помогите пожалуйста не понимаю в чем проблема.
Не проходит только 2 теста
#include "iostream"
using namespace std;
int main() {
double x,y,z;
cin>>x>>y>>z;
int n;
cin>>n;
double s,v,m;
double a,b,c,q;
int u=0;
double r,t,l;
int h=0,j=0;
for(int i=0;i<n;++i) {
cin>>a>>b>>c>>q;
s=a*q;
r+=s;
v=b*q;
t+=v;
m=c*q;
l+=m;
}
if (r>=x) j=1;
if (t>=y) h=1;
if (l>=z) u=1;
if(j==1&&h==1&&u==1) cout<<"YES"; else cout<<"NO";
return 0;
}
В некоторой сверхсекретной лаборатории изучаются физические возможности животных. Любой живой организм нуждается в трех компонентах пищи – белках, жирах и углеводах. Известен набор продуктов, имеющийся в распоряжении лаборатории, и меню животных – сколько единиц каждого продукта они получают. Известно также, сколько белков, жиров и углеводов необходимо для нормальной жизнедеятельности животного. Необходимо определить, получает ли животное достаточное количество питательных веществ. Известно, что животному требуется в сутки X белков, Y жиров и Z углеводов.
Известно также, что всего животное получает в сутки N продуктов питания, и для каждого из них известны Ai, Bi, Ci и Qi – соответственно, энергетическая ценность единицы продукта в белках, жирах и углеводах и количество единиц этого продукта. Все числа – действительные, заданные с точностью до 5 знаков после запятой.
Входные данные
На первой строке входных данных записаны числа X , Y и Z . На второй строке записано число N. Далее на N строках записаны, соответственно, Ai, Bi, Ci и Qi.
Выходные данные
Выведите YES , если данный пищевой рацион является достаточным по всем параметрам, и NO в противном случае.
#include <math.h>
#include <iostream>
using namespace std;
long long unsigned input() {
long double t;
cin >> t;
return (long long unsigned)roundl(t * 100000.0);
}
int main() {
long long unsigned
x = input() * 100000llu,
y = input() * 100000llu,
z = input() * 100000llu;
long long unsigned sa = 0llu, sb = 0llu, sc = 0llu;
unsigned n;
cin >> n;
for (unsigned i = 0; i < n; ++i) {
long long unsigned a = input(), b = input(), c = input(), q = input();
sa += a * q;
sb += b * q;
sc += c * q;
}
cout << (sa >= x && sb >= y && sc >= z ? "YES" : "NO");
}
Это только концепт. Проблема, скорее всего, из-за того, что вычисления с плавающей запятой всегда производятся с погрешностью. И тут три варианта - либо учитывать эту погрешность (ВУЗовский учебник вычислительной математики в помощь), либо использовать какую-то библиотеку чисел с фиксированной запятой (этот вариант нельзя назвать "без ООП"), либо переводить всё в целочисленную арифметику. Представленное - третий вариант. Но код не проверялся.