怎样使代码优化的更好
作者 佚名技术
来源 服务器技术
浏览
发布时间 2012-07-07
今天在公司,一同事问了我一个问题,我想写一个方法,当接收到任意长度整型数值的时候,我如何只保留首位,其他位全部置为0呢。我思考了几秒钟:你可以先把整型参数用String强类型转换,看看字符串的长度,这样你就能根据长度得到首位的数字,后面再根据长度补零就行了。这时他问道,可不可以不通过字符串转换,直接用整型来处理呢?于是我们开始研究: 第一种做法: functionencoder(num:int):int{ varsNum:int=num; varcount:int=0; while(true){ count++; sNum/=10; if(sNum<10){ sNum=Math.floor(sNum); break; } } returndecoder(sNum,count); } functiondecoder(num:int,step:int):int{ var_num:int=num; for(vari:int=0;i<step;i++){ _num*=10; } return_num; } 经过测试,这种做法是没有问题的,但是这是不是最好的方法呢,当然不是,因为Math.floor()的原因肯定会导致 效率下降一部分,有办法替换么,其实很简单,直接用int()转换一下就行了。这样是最优做法么,当然还不是,看看下面这段代码: 第二种做法: functionencoder(num:int):int{ vari:int=num; varj:int=1; while(i>10) { j*=10; i=num/j; } returni*j; } 这段代码相信大家都能看懂,它的优化在哪呢?比之前少了一个循环,当然效率会大幅提升了。我们只需再添加一个变量作为被乘数,这样就减少了一个循环。这段代码基本已经是效率很高了,但其实如果你够细心的话,仍然可以再进行优化,就是这句:i=num/j;我们把它替换成i *= .1;为什么呢?因为在计算机内部,乘运算比除运算要快。让我们看一下测试结果吧: (左边是乘运算,右边是除运算,单位:毫秒) 当循环100万次时: 10281070 10491065 10451063 10241074 当循环1000万次时: 1031910784 1046710625 关键词:代码 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
上一篇: 容易忽略的多条件状态问题下一篇: 按条件显示Flash中的List组件各行样式
关于怎样使代码优化的更好的所有评论