C ++测试双精度除数

问题描述 投票:3回答:5

为什么num是double时((num / i) % 1 == 0)为什么不能在C ++中工作?以及我将如何编写此代码,该代码通过检查是否有余数(例如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;
}
c++ double factorial arithmetic-expressions
5个回答
5
投票

实际上,您要做的是检查n是否可被i整除,因此您所要做的就是

if ((num / i) % 1 == 0)

进入

if (num % i == 0) 

您应该知道这容易出错,因为您正在使用double作为num的类型。您应该改用int


7
投票

%运算符仅适用于整数类型(且由用户定义)使其过载的类型)。对于浮点,您需要功能fmod


2
投票

%运算符由C ++ 11§5.6/ 4定义:

如果结果的类型可表示商a / b,则(a / b)* b + a%b等于a。

这对于浮点类型没有意义。模数的定义取决于除法舍入为整数。

如James Kanze所说,改用std::fmod


0
投票

此代码返回一个双重对象

std::fmod

仅对int类型允许模运算。您可以将其转换为int类型

(num / i)

0
投票
( ((int) (num / i) ) % i)
© www.soinside.com 2019 - 2024. All rights reserved.