Что не так с этим выражением? & quot; if (factorarray [x]% 2 == 0 & amp; factorarray [x]% 3 == 0 … & quot;

Вот код:

#include <iostream>
#include <ctype.h>
#include <iomanip>using namespace std;

class Project3
{
public:
void factorcalc()
{
while (i<5000000){
++i;
factor = prime/i;
if (factor == (long long int)factor){
//if (modf(primeoverthree, 0) == 0){
cout << "Factor is: " << setprecision(12) << factor << endl;
cout << "Denominator is: " << setprecision(12) << i << endl;

++x;
factorarray[x] = factor;
}
else{/*empty else statement*/}
}
}
void displayfactorresults ()
{
for (x=0; x<9; ++x)
if (factorarray[x]%2 == 0 && factorarray[x]%3 == 0 && factorarray[x]%5 == 0 && factorarray[x]%7 == 0){
cout << factorarray[x] << setprecision(12) << endl;
}
}
private:
long double factor = 1;
long double prime = 600851475143;
long double i = 0;
int x = 0;
long double factorarray[9];
};int main() {
Project3 Pro3;
Pro3.factorcalc();
Pro3.displayfactorresults();

return 0;
}

Код в ответ на Проект 3 на projecteuler.net. Я пытаюсь найти самый большой главный фактор 600851475143, используя базовые знания C ++ & здравый смысл.

Ошибка происходит в void displayfactorresults функция.

Компилятор выводит сообщение об ошибке:

«недопустимые операнды для двоичного выражения ‘long-double’ & ‘Длинный двойной»

0

Решение

% Оператор остаток может быть применен только к целочисленным операндам.

factorarray[x] имеет тип long doubleтип с плавающей точкой.

Либо использовать fmod функция (следите за ошибками округления!) или преобразуйте операнды в целочисленный тип.

Или, еще лучше, сделать factorarray во-первых, массив некоторого достаточно большого целочисленного типа. Вы уже предполагаете, что значения могут быть преобразованы в long long int, Преобразование чего-либо в желаемый тип обычно не так хорошо, как использование нужного типа.

4

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

factorarray массив парных чисел Вы не можете использовать по модулю (%) на double, Либо преобразовать его в массив int или приведите элемент массива, прежде чем использовать его ((int)factorarray[x]) % 2 == 0

1

factorarray[x] % 2 == 0 (double type% 2 == 0) не имеет смысла, потому что напоминание никогда не будет 0, и, конечно, компилятор не позволит это сделать.

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