Guide for Escriptura Binaria


Això és una guia per ajudar-te a començar amb aquest problema — no és la solució.
Mostra el codi per a: Consideracions generals Java 11 Python 3

Com abordar aquest problema

Se't donarà un nombre \(N\) i després \(N\) nombres enters separats per espais (cadascun entre 0 i 255, ja \ que has d'escriure'ls com a bytes). Has de crear un fitxer BINARI (no de text) dins la carpeta out amb \ aquests valors, i imprimir per pantalla el nom d'aquest fitxer.

Idea general:

  1. Llegeix \(N\) i després els \(N\) nombres de l'entrada.
  2. Obre un fitxer nou dins out en mode binari d'escriptura (no de text).
  3. Escriu cada nombre com un sol byte (un valor de 0 a 255), no com el text del nombre.
  4. Tanca el fitxer i imprimeix per pantalla només el nom del fitxer que has creat (per exemple \ out/answer.txt, imprimiries answer.txt).

Paranys habituals:

  • Si obres el fitxer en mode text i hi escrius amb print/write normal, estaràs escrivint els \ caràcters del nombre (per exemple "42" com els dos caràcters '4' i '2'), no el valor binari 42. \ Cal mode binari explícit.
  • Un byte només pot contenir valors de 0 a 255: si algun nombre de l'entrada no hi cap, revisa bé com \ el converteixes.
  • Recorda imprimir només el NOM del fitxer, no la ruta completa out/....

Pista per a Java

En Java, FileOutputStream escriu bytes directament. El mètode write(int) només fa servir el byte \ més baix del valor que li passis, així que si els teus nombres van de 0 a 255 el pots fer servir tal qual:

import java.util.*;
import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
        Scanner sc = new Scanner(System.in);
        int n = Integer.parseInt(sc.nextLine().trim());
        StringTokenizer st = new StringTokenizer(sc.nextLine());

        String nomFitxer = "answer.txt"; // tria el nom que vulguis
        try (FileOutputStream fos = new FileOutputStream("out/" + nomFitxer)) {
            for (int i = 0; i < n; i++) {
                int valor = Integer.parseInt(st.nextToken());
                fos.write(valor);
            }
        }

        System.out.println(nomFitxer);
    }
}

Fixa't que fos.write(valor) escriu un únic byte cru, no el text del nombre.


Tornar al problema