确定数字是十的倍数还是在特定的一组范围内?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (15)

我在我的程序中需要几个循环。我可以写出伪代码,但我不完全知道如何逻辑写它们。

我需要 -

if (num is a multiple of 10) { do this }

if (num is within 11-20, 31-40, 51-60, 71-80, 91-100) { do this }
else { do this } //this part is for 1-10, 21-30, 41-50, 61-70, 81-90

我想象我需要使用模数的第一个陈述,是否if (num == 100%10)正确?

第二个我不知道。我可以写出来,if (num > 10 && num is < 21 || etc)但必须有比这更聪明的东西。

提问于
用户回答回答于

对于第一个,检查一个数字是否是一个倍数的使用:

if (num % 10 == 0) // its divisible by 10

对于第二个:

if(((num - 1) / 10) % 2 == 1 && num <= 100)

但是这很密集,你可能会更明智地列出选项。

现在你已经更好地了解你在做什么,我会写第二个:

   int getRow(int num) {
      return (num - 1) / 10;   
   }

   if (getRow(num) % 2 == 0) {
   }

它的逻辑是相同的,但通过使用这个函数,我们可以更清楚地了解它的含义。

用户回答回答于

如果(num是10的倍数){做这个}

if (num % 10 == 0) {
  // Do something
}

如果(数字在11-20,31-40,51-60,71-80,91-100){做这个}

这里的诀窍是在范围内寻找某种共性。当然,你总是可以使用“强力”方法:

if ((num > 10 && num <= 20) ||
    (num > 30 && num <= 40) ||
    (num > 50 && num <= 60) ||
    (num > 70 && num <= 80) ||
    (num > 90 && num <= 100)) {
  // Do something
}

但是你可能会注意到,如果你1从中减去num,你会得到范围:

10-19, 30-39, 50-59, 70-79, 90-99

换句话说,所有的2位数字的第一个数字是奇数。接下来,你需要提出一个表达这一点的公式。你可以得到第一位数除以10,并且可以通过在除以2时检查余数1来测试它是奇怪的。将所有这些放在一起:

if ((num > 0) && (num <= 100) && (((num - 1) / 10) % 2 == 1)) {
  // Do something
}

考虑到代码更长但可维护的代码和更短的“聪明”代码之间的折衷,每次我都会选择更长更清晰的代码。至少,如果你尝试变得聪明,请包括一个评论,以准确解释你要完成的工作。

扫码关注云+社区