Edisi pembelajaran bahasa Indonesia. Kode dan keluarannya tetap seperti aslinya.
Perulangan: digit, pembalikan angka, dan primalitas
Jumlahkan digit bilangan bulat, balik urutannya, dan klasifikasikan hasilnya.

Baca bilangan bulat positif N. Hitung jumlah digit dan bentuk bilangan terbalik secara aritmetis tanpa konversi ke string. Tentukan apakah hasilnya prima, komposit, atau bukan keduanya jika nilainya tidak lebih dari satu.
Cetak tepat tiga baris dengan label Digit Sum:, Reversed:, dan Status:. Status yang diizinkan adalah Prime, Composite, dan Neither. Jangan menerjemahkan kata tersebut karena merupakan bagian format yang diperiksa tes.
Masukan
Satu bilangan bulat positif N.
Keluaran
Digit Sum: <jumlah> Reversed: <bilangan terbalik> Status: <Prime|Composite|Neither>
Batasan
- 1 <= N <= 1.000.000.000
- Waktu: 1 detik. Memori: 64 MB.
- Gunakan tipe yang dapat menampung bilangan terbalik.
Petunjuk
- Gunakan % 10 untuk digit terakhir dan / 10 untuk menghapusnya.
- Perbarui reversed = reversed * 10 + digit.
- Cukup periksa pembagi hingga akar kuadrat hasilnya.
Kode C
#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;
}Buka di kompilerSolusi dan penjelasan
Telusuri salinan N sambil mengakumulasi jumlah dan bilangan terbalik. Nol di akhir hilang saat integer dibalik: 100 menjadi 1.
Tangani nilai di bawah dua serta keterbagian oleh dua dan tiga terlebih dahulu. Setelahnya, kandidat 6k - 1 dan 6k + 1 dapat diperiksa. Kondisi divisor <= n / divisor menghindari overflow kuadrat.
Kompleksitasnya O(log10(N) + sqrt(bilangan terbalik)) dengan ruang tambahan O(1). Bilangan 4321 komposit karena 29 × 149 = 4321.
Kode solusi
#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;
}Pertanyaan umum
Mengapa kode dan keluarannya tetap dalam bahasa Inggris?
Kata kunci, pengenal, dan teks yang diperiksa tes dipertahankan agar program tidak berubah. Penjelasan dan kontrol telah diterjemahkan.