我解決從HackerRank一個挑戰,這就是所謂的翻轉位 從這裏:https://www.hackerrank.com/challenges/flipping-bits 當我看到,我已經嘗試是正確的每一種情況下 你先輸入要轉換號碼的數量。 然後給出一個數字,它將它轉換爲32位無符號位二進制。然後它翻轉所有位0-> 1 & 1-> 0,然後將其轉換爲十進制並打印。 這裏是我的代碼,我知道它不是最優的,它會給我運行時錯誤,但我想從這裏開始,讓代碼正確。錯誤而翻轉位
import java.io.*;
import java.util.*;
public class Solution {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int cases = input.nextInt(); // Número de casos
Long[] dec_nums = new Long[cases]; // Arreglo contenedor de casos
for (int i = 0; i < cases; i++) {
dec_nums[i] = input.nextLong(); // Almacenamiento de casos
}
String[] bin_nums = new String[cases]; // Arreglo con dec-bin
for (int i = 0; i < cases; i++) { //Convertir cada decimal a binario
bin_nums[i] = (String.format("%032d", (Long.parseLong(Long.toBinaryString(dec_nums[i])))));
//Rellenar con 0's
}
String[] final_bin=new String[cases];
for(int i=0;i<cases;i++){
final_bin[i]="";
for(int j=0;j<bin_nums[i].length();j++){
if(bin_nums[i].charAt(j)=='0'){
final_bin[i]+="1";
}
if(bin_nums[i].charAt(j)=='1'){
final_bin[i]+="0";
}
}
}
long[]final_dec= new long[cases];
for(int i=0; i<cases;i++){
final_dec[i]=0;
for(int j=0; j<32;j++){
if (final_bin[i].charAt(j)=='1'){
final_dec[i]=Long.parseLong(final_bin[i], 2);
}
}
}
//Imprimir binarios
System.out.println("Binarios:");
for (int i = 0; i < cases; i++) {
System.out.println(bin_nums[i]);
}
//Imprimir binarios flipped
System.out.print("Flipped: ");
System.out.println(" ");
for(int i=0; i<cases; i++){
System.out.println(final_bin[i]);
}
System.out.println("Decimales");
System.out.println(" ");
for(int i=0; i<cases; i++){
System.out.println(final_dec[i]);
}
}
}
的問題是其中I輸入2147483647 它顯示:
異常在線程 「主」 java.lang.NumberFormatException:對於輸入>字符串: 「1111111111111111111111111111111」 在> java.lang中.NumberFormatException.forInputString(NumberFormatException.java>:65) at java.lang.Long.parseLong(Long.java:592) at java.lang.Long.parseLong(Long.java:631) at flipping_bits_v3.Solution。 main(Solution.java:17)
我不知道它可能是什麼,這是我沒有處理的特殊情況嗎? 謝謝。