2017-08-04 104 views
-2

我刚刚完成了关于Kattis“A Rational Sequence 2”的一个问题,并想知道是否有更有效的方法可以将二进制数转换为十进制数。这是我的代码:更有效的解决方案?

public static int getDecimalValue(String sequence){ 

    int value = 1; 

    for(int i = 0; i < sequence.length(); i++){ 
     if(sequence.charAt(i) == '1') 
      value += (int)Math.pow(2, i); 
    } 
    return value; 
} 

任何帮助将是伟大的!

+0

这就是Java的方式... – WizardWy

+3

试试这个:的Integer.parseInt(binaryString,2) – subro

+0

你可以使用的Integer.parseInt(序列,2); ...第二个参数是对的基础转换二进制它是2 ... – 100rabh

回答

0

int value = Integer.parseInt(sequence,2);

+0

这不是他要求的... – bharath

+0

@bharath,为什么不呢?你是否检查了JRE代码的效率? –

0

几点。首先,你的代码中实际存在一个错误 - 尝试传递它00000000(8个零),看看会发生什么。

至于效率,您可以节省一些成本。你可以改变你计算长度的位置,你可以计算,这比计算速度要快很多。

public static int getBinaryValue(String sequence){ 

    int value = 1; //have another glance at this line! 

    for(int i = 0, n=sequence.length(); i < n; i++){ 
    //I declared a variable 'n' in the initialisation, this means its only 
    //checked once, rather than being checked every time 
     if(sequence.charAt(i) == '1') 
      value += 1 << i; 
      //and here I've bitshifted the value. Basically I've said "take 
      //the number one and then shift it left down an imaginary binary 
      //track i times". So if i is three, for example, it'll shift it 
      //from 00000001 to 00000010 to 00000100 to 00001000, which is 8 
      //2^3 = 8 
    } 
    return value; 
} 
+0

谢谢!我对位操作还不太好,所以我一定会玩这个,尽管你的解释非常好!欣赏它! – WizardWy