有多少种方法可以看出一个数字是否均匀,哪一个是最快最清晰的?

nop*_*ole 1 algorithm math

给出任何数字,确定它的最佳方法是什么?你能想到多少种方法,最快的方式和最清晰的方式是什么?

Dem*_*emi 33

bool isEven = ((number & 0x01) == 0)
Run Code Online (Sandbox Code Playgroud)

问题是"任何数字",所以可以放弃浮动或以另一种方式处理它们,也许首先将它们扩展到一个整数值 - 注意溢出 - 即改变2.1到21(乘以10并转换为int)然后测试.然而,可以合理地假设,通过提及"任何数字",提出问题的人实际上是指整数值.

  • @Shane:严肃地说,我看到(和使用过)运算符的次数远远超过%运算符(假设C/C++/Java - 类似语言:-)对于我自己,(x&1 == 0 )实际上比(x%2 == 0)更清晰.这就是我说这是一个"奇怪"问题的原因之一; 对于像这样简单的事情,没有"最清楚的". (6认同)
  • template <typename T> inline bool is_even(T number){return(number&0x01)== 0; 一点清晰度从不伤害任何人 (3认同)

sip*_*wiz 28

bool isEven = number % 2 == 0;
Run Code Online (Sandbox Code Playgroud)

  • 模数很慢.使用位和.如果低位为1则为奇数.如果低位为0则为偶数. (7认同)
  • 依赖编译器优化是不好的做法.Modulo意味着划分,在数学上更昂贵.您应该真正理解您的代码正在做什么,并以这样的方式编写它,以便向任何读者清楚地解释您的意图. (7认同)
  • 有些编译器会进行优化,有些则没有.当您可以自己确保优化时,请不要相信您的编译器.如果数字是最大整数值,则差异是速度可能非常显着. (4认同)
  • 一个好的编译器会自动将%2转换为&1.即使关闭了优化,gcc也会这样做. (3认同)

Odd*_*ing 10

isEven(n) = ((-1) ^ n) == 1
Run Code Online (Sandbox Code Playgroud)

其中^是您语言的指数/幂函数.

我没有说它快速或清晰,但它具有新颖的价值.


bri*_*gge 10

答案取决于申请的职位.如果您正在申请企业架构师职位,那么以下内容可能适用:

首先,您应该创建一个适当的面向服务的体系结构,因为奇怪的服务肯定不会是您企业中唯一可重用的组件.一个SOA由服务接口,服务消费者.该服务是可以通过网络调用的功能.它公开了一个接口契约,通常在目录服务中注册.

然后,您可以创建一个简单对象访问协议(SOAP)HTTP Web服务来公开您的服务.

接下来,您应该阻止客户端直接调用您的Web服务.如果你允许这样做,那么你最终会得到一堆点对点的通信,这很难维护.客户端应通过企业服务总线(ESB)访问Web服务.

除了提供标准的可插拔架构外,还可以在总线上进行其他组件,如服务编排.

通常,应避免编写定制的偶数/奇数服务.您应该写一份提案请求(RFP),并让几个供应商向您展示他们的偶数/奇数服务.供应商的产品应该能够插入您的ESB,并为您提供服务级别协议(SLA).


Blo*_*ard 5

这在ruby中更容易:

isEven = number.even?
Run Code Online (Sandbox Code Playgroud)