如何将计算结果0.5转为1而非0?C程序圈复杂度需为1不能用if else
解决方法
你可以利用整数运算的向上取整技巧,不需要任何条件判断语句,直接修改计算表达式即可。原来的(U*V)/2是向下取整的整数除法,现在要把奇数乘积的情况(也就是结果为0.5的场景)向上取整为1,只需要把表达式改成(U*V + 1)/2。
修改后的代码如下:
#include <stdio.h> int main() { int U,V; scanf("%d %d",&U,&V); printf("%d",(U*V + 1)/2); }
原理说明
- 当
U*V是偶数时,U*V +1是奇数,整数除法(偶数+1)/2的结果和偶数/2完全一致,比如4+1=5,5/2=2,和4/2=2相同。 - 当
U*V是奇数时,U*V +1变成偶数,整数除法的结果就是原除法结果加1,比如1+1=2,2/2=1,刚好把原来的0.5对应的整数结果0转换成1。
这样既满足了圈复杂度为1的要求(没有任何分支判断),也实现了你的需求。
内容的提问来源于stack exchange,提问作者Atomhype
相关产品推荐
相关产品推荐

