紧凑的代码,用于以2的幂形式查找整数因子

时间:2014-09-08 21:29:25

标签: c# math bit-manipulation

最近我在其中一个在线比赛中遇到了一个有趣的问题;在比赛中没有问题的表述,只有单元测试来描述它。解决方案的语言是C#。该解决方案由生成的大小的字节码评分(我不知道正在使用的特定编译器,但很可能是它的MS VS 2013),以及正在运行的表现无关紧要

问题(在我的表述中):给你一个有符号整数。以

的形式找出其最大因素
2^n, n >= 1

如果没有这样的因素返回1。

我最终得到了以下解决方案:

int Puzzle(int n) {
   if (n == 0) { 
     return n;
   }
   int shift = 0;
   while (((1 << shift) & n) == 0) {
     shift++;
   }

   return 1 << shift;    
}

在我的解决方案中,我计算零位置的数量,直到遇到第一个。

虽然系统已接受此解决方案,但解决方案的质量评级非常低。

有没有办法用代码解决这个问题,可以用更紧凑的字节码编译?

UPD :感谢rici和一些冥想我已将我的解决方案升级为

n - n^(n&-n)

1 个答案:

答案 0 :(得分:1)

我会尝试的是n&-n。您可能会喜欢弄清楚它是如何工作的。