Edição didática em português. O código e suas saídas preservam o original.
Exercícios de laços: dígitos, inversão e primalidade
Some os dígitos de um inteiro, inverta sua ordem e classifique o número invertido.

Leia um inteiro positivo N. Calcule a soma de seus dígitos e construa o inteiro invertido com operações aritméticas, sem convertê-lo em string. Classifique o resultado como primo, composto ou nenhum dos dois se for menor ou igual a um.
Imprima exatamente três linhas com os rótulos Digit Sum:, Reversed: e Status:. Os estados possíveis são Prime, Composite e Neither. Preserve essas palavras em inglês: elas fazem parte do contrato de saída e dos testes.
Entrada
Um inteiro positivo N.
Saída
Digit Sum: <soma> Reversed: <invertido> Status: <Prime|Composite|Neither>
Restrições
- 1 <= N <= 1.000.000.000
- Tempo: 1 segundo. Memória: 64 MB.
- Use um tipo suficientemente largo para o inteiro invertido.
Dicas
- Obtenha o último dígito com % 10 e remova-o com / 10.
- Atualize reversed = reversed * 10 + digit.
- Para testar primalidade, basta procurar divisores até a raiz do número.
Código 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;
}Abrir no compiladorSolução e explicação
Percorra uma cópia de N e acumule a soma e a inversão. Zeros finais desaparecem ao inverter um inteiro: 100 vira 1.
Trate primeiro valores menores que dois e os divisíveis por dois ou três. Depois você pode testar candidatos 6k - 1 e 6k + 1. Para evitar estouros, compare o divisor com n / divisor.
O custo é O(log10(N) + sqrt(invertido)) e o espaço auxiliar O(1). 4321 é composto, pois 29 × 149 = 4321.
Código da solução
#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;
}Perguntas frequentes
Por que o código e a saída continuam em inglês?
Palavras-chave, identificadores e textos verificados pelos testes são preservados para não alterar o programa. As explicações e os controles estão traduzidos.