2016-11-28 1 views
0

Pouvez-vous s'il vous plaît m'aider à trouver un moyen d'ajouter des zéros à gauche d'une chaîne binaire, voici ce que je pensais fonctionner, mais il imprime simplement le binaire sans 0.Ajouter des zéros à gauche de la chaîne binaire - Java

package flipping_bits; 
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 

    int[] dec_nums=new int[cases];  //Arreglo contenedor de casos 
    for (int i=0;i<cases;i++){ 
     dec_nums[i]=input.nextInt(); //Almacenamiento de casos 
    } 

    int[] bin_nums=new int[cases]; //Arreglo con dec-bin 
    for (int i=0;i<cases;i++){    
     bin_nums[i]=Integer.parseInt(String.format("%032d",(Integer.parseInt(Integer.toBinaryString(dec_nums[i]))))); //Convertir cada decimal en el arreglo a binario 
    } 


    //Imprimir binarios 
    for (int i=0; i<cases;i++){ 
     System.out.println(bin_nums[i]); 
    } 

} 
} 
+0

peut vous fournir l'entrée de fichier que vous lisez à partir? Aussi, je suppose que cela provient d'un site de formation d'algorithme comme hackerrank.com. Si oui, vous pouvez vérifier les discussions là-bas – vlatkozelka

+0

c'est à partir de [https://www.hackerrank.com/challenges/flipping-bits] J'ai déjà vérifié la section des discussions et personne ne l'a fait en utilisant Java. Eh bien, je n'ai pas trouvé de code que je puisse comprendre car je dois alors expliquer à mon professeur comment je l'ai résolu. –

Répondre

1

Si je comprends votre question correctement, il suffit de changer bin_nums d'un int[] à un String[] et ne pas analyser l'entier que vous avez formaté, vous vous retrouverez avec une représentation de 32 bits d'un nombre entier

public static void main(String[] args) { 


    Scanner input = new Scanner(System.in); 

    int cases = input.nextInt();  //Número de casos 

    int[] dec_nums=new int[cases];  //Arreglo contenedor de casos 
    for (int i=0;i<cases;i++){ 
     dec_nums[i]=input.nextInt(); //Almacenamiento de casos 
    } 

    String[] bin_nums=new String[cases]; //Arreglo con dec-bin 
    for (int i=0;i<cases;i++){    
     bin_nums[i]=(String.format("%032d",(Integer.parseInt(Integer.toBinaryString(dec_nums[i]))))); //Convertir cada decimal en el arreglo a binario 
    } 


    //Imprimir binarios 
    for (int i=0; i<cases;i++){ 
     System.out.println(bin_nums[i]); 
    } 

} 

Ceci est mon cas de test avec le résultat:

3 
1 
2 
3 
00000000000000000000000000000001 
00000000000000000000000000000010 
00000000000000000000000000000011 

Mais en supposant que vous pourriez essayer de résoudre quelques questions d'algorithme qui vous est habituellement nécessaire de le résoudre d'une manière optimale, cela pourrait ne pas faire l'affaire et peut dépasser la limite de temps.

Il semble un exercice en raison de la classe nommée Solution et le style du code, par exemple: test de cas, le nombre de cas de test ...

+0

Merci! C'est exactement ce que je voulais. Et oui, c'est en fait à partir de la section des algorithmes de HackerRank, retournant les bits spécifiquement. Après cela, je dois retourner tous les 32 bits et imprimer le nombre final en décimal. Que me suggérez-vous? –

+0

Je vous suggère d'apprendre les bases des opérations et les "triches". http://www.catonmat.net/blog/low-level-bit-hacks-you-absolutely-must-know/ – vlatkozelka

0

Ajouter le 0 devant chaque nombre binaire en vous tableau avec l'exemple suivant:

bin_num [0] = thisBinarynumber updatedNumber = '0' + thisBinarynumber