扭转数字的时间比较

时间:2015-06-18 15:37:04

标签: java

在用于反转数字的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;     
 }
}

1 个答案:

答案 0 :(得分:2)

当您使用数学解法反转时,您只需迭代数字一次。当您将其转换为StringBuffer,将其反转,然后返回到整数时,您将多次迭代这些数字。你的数学方法另外没有繁重的计算,只是简单的算术。

这就是为什么有时候构建自己的方法比使用内置函数更有效,如果你知道怎么做,你知道如何优化。许多内置功能都设计得非常灵活,但需要权衡的是它们还需要更多时间或内存,或两者兼而有之。