gpt4 book ai didi

java - @HackerRank : FlippingBits. 输出错误

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:44:27 27 4
gpt4 key购买 nike

这个真的让我很辛苦。所以最终我决定向你们寻求帮助。或许,您可以查看它并告诉我哪里出错了。

@ https://www.hackerrank.com/challenges/flipping-bits

基本上:

Input = Number

  1. Convert it to binary String.
  2. Flip the bits (Set all 0's and reset all 1's)
  3. Output the Number you get by doing it.

I have hard-coded a number for now, as it was mentioned in the question (= 2147483647)

问题是:它给我的输出是:

0

代码:

public class FlippingBits {

private static String flipBits(String binaryOrig){
String flippedString = "";
for(int i = 0; i<binaryOrig.length(); i++){
if(binaryOrig.charAt(i) == '1')
flippedString += '0';
else
flippedString += '1';
}
return flippedString;
}

private static long getNum(String flippedString){
long new_number = 0;
for(int i = 0; i < flippedString.length(); i++){
new_number = (2*new_number) + (flippedString.charAt(i) - '0');
}
return new_number;
}

public static void main(String[] args) {

long num = 2147483647;
String numBinaryString = Long.toBinaryString(num);
String flippedString = flipBits(numBinaryString);
System.out.println(Long.toString(getNum(flippedString)));
}
};

谁能告诉我这是怎么回事!这是在尝试 3-4 小时后。对不起,如果它是微不足道的。

提前致谢。

编辑:问题的摘录:

"以1为例,无符号32位是

00000000000000000000000000000001

然后翻转我们得到

1111111111111111111111111111110

这又是 4294967294"

所以,我觉得它必须做一些长期为 64 位的事情。 !?

最佳答案

因为 Java 没有无符号类型,并且以补码形式解释整数,所以您需要解决这两个问题。

对于第一点,我们可以使用一个long来存储值。对于第二点,我们可以用 0x00000000ffffffff 进行位掩码,得到我们想要的 32 位部分。

int original = 1;
long flipped = ~original & 0x00000000ffffffffL;
System.out.println(flipped);

// outputs 4294967294

Java 拥有处理上述任务的工具 - 除非万不得已,否则我不会闯入 String 操作。

关于java - @HackerRank : FlippingBits. 输出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28405143/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com