【问题标题】:How to decide whether the result of an integer expression is an integer如何判断整数表达式的结果是否为整数
【发布时间】:2013-08-23 12:28:33
【问题描述】:

我有一个n 的表达式,比如(30 - n(n - 1)) / 2n。我想搜索可能的 n ,只有当结果是整数时,这才是我的答案。有没有办法判断这个表达式的结果是否为整数。

我能想到的唯一方法是(在伪代码中):

for float n <- 1 to 100
  do float result = expression(n);
     int part = (int) result;
     if ( result - part < EPS )
       then good to go

【问题讨论】:

  • 为什么将 n 声明为浮点数?
  • 因为如果它是int,表达式将是一个整数。我错了吗?
  • 当然可以,但是您可以使用整数余数来查看除法是否准确!

标签: c++ c math integer


【解决方案1】:

您可以使用% 计算余数。

int denom = 2 * n;
int numer = 30 - n * (n - 1);

if (denom) {
    if (numer % denom == 0) {
        then good to go
    }
} else {
    /*...denominator is 0! */
}

【讨论】:

  • 这对n == 0 不太适用 :-) 但是由于 OP 声明 n 的范围从 1100,这并不重要。
  • 除以 0 异常与断言一样好,但您是对的,测试非零分母会更友好。
【解决方案2】:

if (30 - n(n - 1)) mod 2n equals to zero

【讨论】:

    【解决方案3】:

    如果modf返回0.0,则调用它的浮点数 on 是一个整数。这是测试是否的标准方法 浮点数是整数;它适用于所有 浮点值,即使是那些会溢出 int 的值。

    【讨论】:

      猜你喜欢
      • 2013-11-05
      • 2013-09-29
      • 2014-01-04
      • 2012-10-14
      • 2011-11-19
      • 2014-09-27
      • 2021-11-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多