计算一系列无符号整数中偶数的最简单方法是什么?
例如:如果范围是[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这将适用于所有范围.
提示1:模运算符将返回当前数字的剩余部分
提示2:您不需要for循环
提示3:范围是连续的
提示4:连续范围内偶数的数量是偶数的一半(有时是一半) + 1,有时是一半 - 1)
提示5:建立在Hint1上:还要考虑(正在+结束+ 1)%2给出
提示6:此线程中的大部分或全部答案都是错误的
提示7:确保你尝试过负数范围的解决方案
提示8:确保您尝试的解决方案的范围涵盖负数和正数
| 归档时间: |
|
| 查看次数: |
8811 次 |
| 最近记录: |