Online C Compiler
Im Compiler öffnen

Deutsche Lernausgabe

C-Schleifen: Ziffern untersuchen

Berechnen Sie die Ziffernsumme, kehren Sie eine Ganzzahl um und prüfen Sie das Ergebnis auf Primzahleigenschaft.

Im Compiler öffnen

C-Schleifen: Ziffern untersuchen
Berechnen Sie die Ziffernsumme, kehren Sie eine Ganzzahl um und prüfen Sie das Ergebnis auf Primzahleigenschaft.

Lesen Sie eine positive Ganzzahl N. Durchlaufen Sie ihre Ziffern, um deren Summe zu berechnen und die umgekehrte Zahl aufzubauen. Ordnen Sie diese anschließend als Primzahl, zusammengesetzte Zahl oder bei Werten unter zwei als keines von beidem ein.

Verwenden Sie Ganzzahlarithmetik zum Durchlaufen der Ziffern. Führende Nullen des Ergebnisses entfallen dabei: Aus 100 wird 1. Die Ausgabetexte bleiben englisch, damit sie exakt zu den Tests passen.

Eingabe

Eine positive Ganzzahl N.

Ausgabe

Drei Zeilen: Digit Sum: <Summe>, Reversed: <Umkehrung> und Status: <Prime|Composite|Neither>.

Vorgaben

  • 1 ≤ N ≤ 10⁹; Grenze: 1 Sekunde und 64 MB.
  • Wählen Sie einen ausreichend großen Ganzzahltyp für das umgekehrte Ergebnis.
Hinweise
  • Die letzte Ziffer ist n % 10; n / 10 entfernt sie.
  • Bauen Sie das Ergebnis mit reversed = reversed * 10 + digit auf.
  • Suchen Sie zur Primzahlprüfung nach Teilern bis zur Quadratwurzel.

Quellcode

#include <stdio.h>
#include <stdbool.h>

// Function to check if a number is prime
bool is_prime(int n) {
    // TODO: Implement prime checking logic (O(sqrt(N)))
    return false;
}

int main(void) {
    int n;
    if (scanf("%d", &n) != 1) {
        return 1;
    }

    // TODO: 1. Calculate sum of digits
    // TODO: 2. Reverse the integer N
    // TODO: 3. Check if reversed integer is Prime

    // Expected print format:
    // printf("Digit Sum: %d\n", sum);
    // printf("Reversed: %d\n", reversed);
    // printf("Status: %s\n", is_prime(reversed) ? "Prime" : "Composite");

    return 0;
}
Im Compiler öffnen
Erklärung der Lösung

Sammeln Sie Summe und umgekehrte Zahl in derselben Schleife und behandeln Sie Werte unter 2 sowie 2 und 3 gesondert.

Schließen Sie Vielfache von 2 und 3 aus und prüfen Sie dann Kandidaten 6k ± 1. Die Bedingung divisor <= n / divisor vermeidet ein möglicherweise überlaufendes Quadrat.

Die Laufzeit beträgt O(log₁₀ N + √R) für das umgekehrte Ergebnis R, der Zusatzspeicher O(1). Für 1234 ist das Ergebnis 4321 zusammengesetzt: 29 × 149.

Lösungscode

#include <stdio.h>
#include <stdbool.h>

bool is_prime(int n) {
    if (n <= 1) return false;
    if (n <= 3) return true;
    if (n % 2 == 0 || n % 3 == 0) return false;
    for (int i = 5; i * i <= n; i += 6) {
        if (n % i == 0 || n % (i + 2) == 0) return false;
    }
    return true;
}

int main(void) {
    int n;
    if (scanf("%d", &n) != 1) {
        return 1;
    }

    int temp = n;
    int digit_sum = 0;
    int reversed = 0;

    // Loop through digits using modulo and integer division
    while (temp > 0) {
        int rem = temp % 10;
        digit_sum += rem;
        reversed = reversed * 10 + rem;
        temp /= 10;
    }

    printf("Digit Sum: %d\n", digit_sum);
    printf("Reversed: %d\n", reversed);

    if (reversed <= 1) {
        printf("Status: Neither\n");
    } else if (is_prime(reversed)) {
        printf("Status: Prime\n");
    } else {
        printf("Status: Composite\n");
    }

    return 0;
}

Häufige Fragen

Warum bleiben Code und manche Ausgaben englisch?

C-Schlüsselwörter, Bezeichner, Programmkommentare und erwartete Ausgaben bleiben wie im Original, damit der Code ausführbar und die Tests konsistent bleiben. Erklärungen und Aufgabenstellungen sind übersetzt.