【问题标题】:Determine if a number is a whole number? [closed]判断一个数是否为整数? [关闭]
【发布时间】:2014-01-04 06:58:42
【问题描述】:

我正在尝试编写一个程序,仅当该数字可被 2 整除时才将其除以 2。我这样做是为了如果该数字除以 2 的结果是浮点数,则将其除以 2 ,像这样:

int p;
printf("Percentage please: ");
scanf("%d", &p);
while (((p/2) != // a floating point value)
{
    p = p/2;
}

但问题是我不确定 C 标准库中是否有像 isint()iswholenumber() 这样的函数。有什么功能或任何方式可以实现类似的东西吗? 任何帮助将不胜感激。

【问题讨论】:

标签: c floating-point int division


【解决方案1】:

您正在寻找模运算,它返回除法的其余部分,所以:

if( n % 2 == 1) // the number is not divisible by 2
if( n % 2 == 0) // divisible by 2

【讨论】:

  • 是否以 C 中定义的负数为模?
  • 是的,它仍然是分区上的剩余部分,-5 % 2 = -1
  • C 2011 第 6.5.5 节第 6 段: 如果商 a/b 是可表示的,则表达式 (a/b)*b + a%b 应等于 a;否则,a/ba%b 的行为都是未定义的。
  • 这就是为什么它不是模运算符,而是余数运算符。
  • if( n % 2 == 0) 是正确的,if( n % 2 == 1) 是错误的,应该是 if( n % 2 != 0) 用于否定 n
【解决方案2】:

当您将两个ints 相除时,结果始终是int(编辑:截断):

1/2 --> 0
2/2 --> 1
3/2 --> 1

所以p/2 is not a float 的逻辑没有意义。相反,正如其他人所建议的那样,您希望使用返回除法余数的模运算符:

if( n % 2 ) // not divisible by 2
{
}
else // divisible by 2
{
}

注意:由于所有不为 0 的整数都等价于true,因此您无需检查n % 2 != 0

【讨论】:

  • 它不是向下舍入,而是被截断(向上舍入负数)。
  • 例如,-3/2 向零舍入,值为 -1,而不是 -2
  • 已更新。忘记了底片。
【解决方案3】:

你可以向用户询问一个字符串,然后使用 int.TryParse

int x;
if (int.TryParse(inputString, out x))
{
    // input is an integer.
}

【讨论】:

  • int.TryParse 不是 C,这个问题被标记为 C
猜你喜欢
  • 2013-11-05
  • 1970-01-01
  • 2013-09-29
  • 1970-01-01
  • 2011-05-24
  • 1970-01-01
  • 2010-12-05
相关资源
最近更新 更多