首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >确定一个数字是10的倍数还是在一组特定范围内

确定一个数字是10的倍数还是在一组特定范围内
EN

Stack Overflow用户
提问于 2014-04-28 07:00:23
回答 9查看 32.1K关注 0票数 105

我的程序中有一些我需要的循环。我可以写出伪代码,但我不完全确定如何从逻辑上编写它们。

我需要-

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语句,我需要使用模数。if (num == 100%10)是正确的吗?

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

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2014-04-28 07:05:18

对于第一个,要检查一个数字是否为多次使用:

if (num % 10 == 0) // It's divisible by 10

对于第二个:

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

但这是相当密集的,而且您最好只是显式地列出这些选项。

现在你已经对你正在做的事情有了一个更好的想法,我把第二个写成:

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

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

这是相同的逻辑,但通过使用函数,我们对它的含义有了更清晰的理解。

票数 88
EN

Stack Overflow用户

发布于 2014-04-28 07:24:37

这是为未来的访问者准备的,而不是初学者。对于更一般的类似算法的解决方案,您可以获取一个起始值和结束值的列表,并检查传递的值是否在其中一个值内:

template<typename It, typename Elem>
bool in_any_interval(It first, It last, const Elem &val) {
    return std::any_of(first, last, [&val](const auto &p) {
        return p.first <= val && val <= p.second;
    });
}

为简单起见,我使用了一个多态的lambda (C++14)而不是一个显式的pair参数。这也应该坚持使用<==来与标准算法保持一致,但只要Elem为其定义了<=,它就会像这样工作。无论如何,它可以像这样使用:

std::pair<int, int> intervals[]{
    {11, 20}, {31, 40}, {51, 60}, {71, 80}, {91, 100}
};

const int num = 15;
std::cout << in_any_interval(std::begin(intervals), std::end(intervals), num);

这里有一个here的实例。

票数 15
EN

Stack Overflow用户

发布于 2014-04-28 08:33:28

第一个很简单。您只需对num值应用模运算符:

if ( ( num % 10 ) == 0)

由于C++会将每个不为0的数字都计算为真,因此您还可以这样写:

if ( ! ( num % 10 ) )  // Does not have a residue when divided by 10

对于第二个,我认为这更容易理解:

这个模式每20次重复一次,所以你可以计算模20。除了那些可以被20整除的元素外,所有你想要的元素都将在一行中。

要获得这些,只需使用num-1或更好的num+19来避免处理负数。

if ( ( ( num + 19 ) % 20 ) > 9 )

这是假设模式永远重复,因此对于111-120,它将再次应用,以此类推。否则,您需要将数量限制为100:

if ( ( ( ( num + 19 ) % 20 ) > 9 ) && ( num <= 100 ) )
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23330100

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档