条件语句-长条件C++

conditional statements - Long condition C++

本文关键字:条件 C++ 语句      更新时间:2023-10-16
y=20;
x=32640;
b=1920;
if (
    n > (x*1) && n < ((x*1)+(b))||
    n > (x*2) && n < ((x*2)+(b))||
    n > (x*3) && n < ((x*3)+(b))||
    n > (x*4) && n < ((x*4)+(b))||
    n > (x*5) && n < ((x*5)+(b))||
    n > (x*6) && n < ((x*6)+(b))||
    n > (x*7) && n < ((x*7)+(b))||
    n > (x*8) && n < ((x*8)+(b))||
    n > (x*9) && n < ((x*9)+(b))||
    n > (x*10) && n < ((x*10)+(b))
    ){y = 40;}

在C++中,有没有一种更快的方法可以做到这一点,因为我只在每个条件的32640之后增加数字?

(性能更快(

我不知道这个解决方案是否更高效,但也许它更可读,更容易编码:

#include <iostream>
#include <cstdlib>
int main()
{
    const int magicNumber = 32640;
    const int maxOffset = 1920;
    int n;
    std::cin >> n;
    int y = 20;
    const std::div_t divresult = std::div(n, magicNumber);
    if (divresult.rem > 0 && divresult.rem < maxOffset &&       // (#1)
            divresult.quot >= 1 && divresult.quot <= 10)    {   // (#2)
        y = 40;
    }
    std::cout << "y: " << y << std::endl;
    return 0;
}

编辑:

在这里,我利用了这样一个事实,即要使您的条件为真,您要测试的变量(n(必须在32640magicNumber的倍数和该数字的倍数加上一些偏移量(maxOffset(之间。这是变量除以magicNumber的余数。参见(#1(。

但这并不是对每个整数都有效,而是仅对某些倍数有效,如原始解决方案中的||所示。在我的解决方案中,这是用商来表示的。(#2(。

在编写这个答案的过程中,我了解到有一个函数std::div可以一步计算这两个成员,并以std::div_t类型的结构返回它们,因此您可以在条件中使用两个成员。在这里,您可以找到有关此功能的更多信息。