计算给定范围内偶数的最简单方法

Fdr*_*Fdr 13 c math

计算一系列无符号整数中偶数的最简单方法是什么?

例如:如果范围是[0 ... 4]那么答案是3(0,2,4)

我很难想出任何简单的方法.我提出的唯一解决方案涉及几个if语句.是否有一行简单的代码可以在没有if语句或三元运算符的情况下执行此操作?

And*_*nck 14

int even = (0 == begin % 2) ? (end - begin) / 2 + 1 : (end - begin + 1) / 2;
Run Code Online (Sandbox Code Playgroud)

哪个可以转换成:

int even = (end - begin + (begin % 2)) / 2 + (1 - (begin % 2));
Run Code Online (Sandbox Code Playgroud)

编辑:这可以进一步简化为:

int even = (end - begin + 2 - (begin % 2)) / 2;
Run Code Online (Sandbox Code Playgroud)

EDIT2:由于我认为C中的整数除法有些不正确的定义(整数除法向下截断正数而向上截断为负数)当start为负奇数时,此公式将不起作用.

编辑3:用户'iPhone初学者'正确地观察到如果begin % 2被替换为begin & 1这将适用于所有范围.


Bri*_*ndy 7

提示1:模运算符将返回当前数字的剩余部分
提示2:您不需要for循环
提示3:范围是连续的
提示4:连续范围内偶数的数量是偶数的一半(有时是一半) + 1,有时是一半 - 1)
提示5:建立在Hint1上:还要考虑(正在+结束+ 1)%2给出
提示6:此线程中的大部分或全部答案都是错误的
提示7:确保你尝试过负数范围的解决方案
提示8:确保您尝试的解决方案的范围涵盖负数和正数