Java 如何找出这两种代码之间的差异?两者在执行时给出相同的答案,但网站称其中一个代码部分正确
问题是计数总设置位: 我的解决办法是:Java 如何找出这两种代码之间的差异?两者在执行时给出相同的答案,但网站称其中一个代码部分正确,java,Java,问题是计数总设置位: 我的解决办法是: public class Solution { public int solve(int A) { long sum=0; long a=A+1; for(int i=0;i<32;i++){ sum=sum+(((a/(int)Math.pow(2,i)))*(int)Math.pow(2,i-1) + (int)Math.max(0, a%(int)Math.pow(
public class Solution {
public int solve(int A) {
long sum=0;
long a=A+1;
for(int i=0;i<32;i++){
sum=sum+(((a/(int)Math.pow(2,i)))*(int)Math.pow(2,i-1) + (int)Math.max(0, a%(int)Math.pow(2,i+1)-(int)Math.pow(2,i)));
}
return (int)sum%1000000007;
} }
公共类解决方案{
公共整数解算(整数A){
长和=0;
长a=a+1;
对于(int i=0;i代码中的问题如下:
(int)Math.pow(2,i)
当i
为31时,这将溢出,因为2^31对于一个int来说太小了(最大的int为2^31-1)。另一个解决方案通过在除法之后才进行强制转换来解决这个问题。但是在他们使用的另一个解决方案中,val2=val2-(int)Math.pow(2,i-1);其中可以溢出(int)Math.pow(2,i-1)不是吗?不,因为只有2^30。谢谢,现在我明白了。祝你度过愉快的一天!
(int)Math.pow(2,i)