Online C Compiler
Buka di kompiler

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.

Buka di kompiler

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 kompiler
Solusi 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.