巴别塔上的雇工


把十进制整数转成二进制…再转成十进制
3月 28, 2008, 1:59 上午
Filed under: 技术体会

昨天听说这样一道面试题,这样描述的:“给你一个十进制整数,把它转化为二进制,从右到左寻找到第一个为1的位,把它设为0,然后把整个整数转化为十进制,请写程序实现这个过程。”

直观的方法,就是用连续除二的方法把输入整数拆成0/1序列,存在数组里,找到那个1,改成0,然后再把这个数组组合成整数。首先,乘除操作就比较耗时,能够用按位左移右移就应该避免乘除(当然编译器有可能替你做这样的乘除优化);其次,不要需求(题目)说怎么做,你就怎么做,要搞清楚需求是要做什么,怎么做是技术上的事情,就这个问题而言,需求其实就是想把一个整数的最后一个为1的bit专成0,什么变成二进制,再转为十进制其实都不是需求,不要让它干扰你,要明白,在计算机上,整数就是用二进制表示的,犯不着转化。

搞清楚需求真的要什么,剩下来的事情就容易了,利用位操作,不要去做十进制和二进制之间的转化就可以搞定。

image


发表评论 so far
留下评论



留下评论