1

我正在为初学者 C++ 类编写一个小程序,我应该从用户那里获取输入(我使用双精度,因为我喜欢让自己更难)并输出它是素数还是复合数,并且如果它是复合的,我需要输出至少一个可以被该数字整除的数字。

我手头的时间太多了,所以我会想办法让它变得更难。我试图在不使用任何东西的情况下做所有事情,只使用 iostream。我已经得到了大部分内容,但这一点让我很困惑:如何在不使用数学库的情况下确定双精度数是否为整数?(我在这里找到了使用 math.h 有很好解决方案的问题,但没有它就什么都没有)我想有一种方法可以做到这一点,而无需为看似如此简单的事情编写 50 行代码......

4

2 回答 2

2

您可能不应该在浮点数中进行任何计算,但是测试数字是否有小数的一种简单方法是发言并将其与原始数字进行比较。在 C++ 中,您可以通过转换为int(假设只有正数)然后转换回double

bool isWhole( double d ) {
   int whole = d;               // will round down to the nearest integer
   return (d-whole < epsilon);  // for a small enough epsilon
}
于 2012-09-13T03:32:14.763 回答
2

您可以将double值转换为适当大的整数类型,然后查看两个值是否相同:

double d = /* whatever */
long long ival = d;
if (ival == d) {
    /* d holds integral value. */
}
于 2012-09-13T12:04:03.377 回答