Deutsche Lernausgabe
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 öffnenErklä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.