条件语句-长条件C++
conditional statements - Long condition C++
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
(必须在32640
或magicNumber
的倍数和该数字的倍数加上一些偏移量(maxOffset
(之间。这是变量除以magicNumber
的余数。参见(#1
(。
但这并不是对每个整数都有效,而是仅对某些倍数有效,如原始解决方案中的||
所示。在我的解决方案中,这是用商来表示的。(#2
(。
在编写这个答案的过程中,我了解到有一个函数std::div
可以一步计算这两个成员,并以std::div_t
类型的结构返回它们,因此您可以在条件中使用两个成员。在这里,您可以找到有关此功能的更多信息。
相关文章:
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- 在没有太多条件句的情况下,我如何避免被零除
- 基于多个条件处理地图中的所有元素
- 条件constexpr函数
- 无论条件是否为true,if总是在c++中执行
- 我可以使用条件运算符初始化C风格的字符串文字吗
- 基于模板值的条件变量
- 多个If语句与使用逻辑运算符计算条件的单个语句的比较
- 将按位if条件转换为普通if条件
- 条件断点在不应该触发时触发
- 为什么简单的算术减法在"if"条件下不起作用?
- 如何在for循环中包含两个索引值的测试条件
- 如果条件为TRUE(最佳方式?),则在do while循环中后置增量
- 我提出什么条件才能再加5%的折扣
- 循环中的条件:为什么每次都调用strlen(),而vector.size()只调用一次
- 即使没有满足他们的条件,我也无法通过一些 do-while 循环
- 如何编写一个使用n倍三元条件语句的C++布尔函数
- 没有超时的C++条件变量
- 正在LLVM中检测整数比较条件
- 在条件变量中触发错误信号的频率是多少