1769 - CPF 1
Validar CPFs não é uma tarefa fácil...
Descrição
Solução
A maior dificuldade desse exercício é como ler a entrada de forma que consigamos ter cada dígito separado apropriadamente para podermos fazer o cálculo de validez dos últimos dois dígitos.
Uma alternativa envolve ler tudo como uma string e traduzir cada caractere para número. Outra alternativa seria ler quatro números inteiros e usar divisões e mods para obter os números esperados.
#include <stdio.h>
int main()
{
int a[4], d[11];
while (scanf("%d.%d.%d-%d", &a[0], &a[1], &a[2], &a[3]) != EOF)
{
for (int i = 0; i < 11; ++i)
{
d[i] = 0;
}
for (int i = 0; i < 3; ++i)
{
int j = 2;
while (a[i])
{
d[3 * i + j] = a[i] % 10;
a[i] /= 10;
--j;
}
}
d[9] = a[3] / 10;
d[10] = a[3] % 10;
int soma = 0;
for (int i = 0; i < 9; ++i)
{
soma += (i + 1) * d[i];
}
soma %= 11;
if (soma == 10)
soma = 0;
if (soma == d[9])
{
soma = 0;
for (int i = 0; i < 9; ++i)
{
soma += (9 - i) * d[i];
}
soma %= 11;
if (soma == 10)
soma = 0;
if (soma == d[10])
{
printf("CPF valido\n");
}
else
{
printf("CPF invalido\n");
}
}
else
{
printf("CPF invalido\n");
}
}
return 0;
}
Last updated
Was this helpful?