2015-06-18 26 views
1

在用於反轉數字的java程序中,我做了兩種方法。扭轉數字的時間比較

首先數學:

找到10的最大功率小於或等於號。

將其與最右邊的數字相乘。

除以10.

重複直到數目的數目是使用的StringBuffer的內置方法反向並轉換回整數0

二。

令我驚訝的是,第二種方法雖然很短,但大量減慢。我認爲使用內置函數會更快。但結果表示否則,是否有這種觀察的原因。對於小數字(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

這個'Integer.toString(n2)'可能已經比你的循環需要更多的時間... – assylias

+0

當然,將一個數字轉換爲一個字符串,反轉字符串並將其解析爲一個數字將會比僅僅一堆算術運算,至少對於合理大小的數字。 – Thomas

+0

小數字呢。 –

回答

2

當反向使用的數學解決方案,您只遍歷數字一次。當您將其轉換爲StringBuffer時,將其反轉,然後返回到Integer,您將多次迭代數字。你的數學方法還沒有繁重的計算,只是簡單的算術。

這尤其是爲什麼有時候建立自己的方法比使用內置函數更有效率,如果你知道如何去做並且你知道事情是如何優化的。許多內置功能的設計非常靈活,但是折衷的是它們也需要更多的時間或內存,或者兩者兼而有之。