在用于反转数字的java程序中,我做了两种方式。
首先以数学方式:
找出小于或等于数字10的最大幂。
将它与最右边的数字相乘。
将数字除以10。
重复,直到数字为0.
第二次使用InBilt方法反向StringBuffer并转换回整数。
令我惊讶的是,第二种方式,虽然相当短,但是大量减速。我认为使用内置函数会更快。但结果说不然,是否有理由进行此观察。对于小数字(3位数)和大数字(9位数),结果相同。
这是我的java代码:
class RevNum
{
public static void main(String []args)
{
int n=987,n2=n;
long ft,st;
int s=0,r=0,p;
st=System.nanoTime();
while(n!=0)
{
p=(int)Math.pow(10,power(n));
r+= n%10*p;
n=n/10;
}
ft=System.nanoTime()-st;
System.out.println("the time taken is "+ft+" and reversed number is "+r);
st=System.nanoTime();
StringBuffer str=new StringBuffer(Integer.toString(n2));
n2= Integer.parseInt(new String(str.reverse()));
ft=System.nanoTime()-st;
System.out.println("the time taken is "+ft+" and reversed number is "+n2);
}
private static int power(int n)
{
int s=0;
while(n/10!=0)
{
++s;
n=n/10;
}
return s;
}
}
答案 0 :(得分:2)
当您使用数学解法反转时,您只需迭代数字一次。当您将其转换为StringBuffer,将其反转,然后返回到整数时,您将多次迭代这些数字。你的数学方法另外没有繁重的计算,只是简单的算术。
这就是为什么有时候构建自己的方法比使用内置函数更有效,如果你知道怎么做,你知道如何优化。许多内置功能都设计得非常灵活,但需要权衡的是它们还需要更多时间或内存,或两者兼而有之。