почему не ((num / i) % 1 == 0)
работать в C ++, когда Num является двойным? и как бы я вместо этого написал этот код, который проверяет факториалы, проверяя, оставляет ли он остаток (и т. д. 0.3333).
int getFactorials (double num)
{
int total = 0; // if (total / 2) is equal too 'num' it is a perfect number.
for (int i = 1; i < num; i++)
{
if ((num / i) % 1 == 0)
{
cout << i << endl;
}
}
return 0;
}
На самом деле, что вы хотите сделать, это проверить, если n
делится на i
так что все, что вам нужно изменить, это
if ((num / i) % 1 == 0)
в
if (num % i == 0)
Вы должны знать, что это подвержено ошибкам, потому что вы используете double
как тип для num
, Вы должны использовать int
вместо.
%
Оператор допускается только для целочисленных типов (и определяется пользователем
типы, которые его перегружают). Для плавающей запятой вам нужна функция
fmod
,
%
оператор определяется C ++ 11 §5.6 / 4:
если частное a / b представимо в типе результата, (a / b) * b + a% b равно a.
Это бессмысленно для типов с плавающей точкой. Определение модуля зависит от округления деления до целого числа.
Как говорит Джеймс Канзе, используйте std::fmod
вместо.
Этот код вернет вам двойной объект
(num / i)
Операция по модулю разрешена только для типа int. Вы можете преобразовать это в тип int
( ((int) (num / i) ) % i)