这道题目其实并不难,但是如何写才能让程序看上去更简单,更高效呢?看一下几种算法的比较:
算法一:
long fn1(long n)
这样写其实是最容易理解的写法,但是效率却很低,尤其当数据量很大时,下面是一个改进方法:
算法二:
long fn2(long n)
这样写改进了不少,将所有涉及到乘法指令的语句改为执行加法指令,既达到要题目的要求而且运算时间上缩短了很多,而代价仅仅是增加了一个整型变量!但是这样的话效率依然很低。下面看方法三
算法三:
这样写,不仅程序看起来更简单,代码量减少了不少,而且程序的运行效率得到了一个极大的提升,当然还可以进一步的优化以获得的最高效率
算法四:
在这里,用位运算符将十进制转换成二进制来运算,无疑进一步提升了效率