Outro exercício de matemática resolvido! O "Fatorial de Novo!" foi um exercício bem legal de resolver e envolve o cálculo do fatorial e o uso do resto (operador %) para ir pegando sempre o último dígito de um número. Foi um bom exercício para praticar o raciocínio. Confere abaixo a minha solução! Ah, eu fiz com while, mas com do .. while talvez fique mais elegante. Conte nos comentários como você fez!
Plataforma: URI (BEECROWD)
Problema: 1429
Enunciado:
Mateus, um calouro de engenharia, está desenvolvendo uma nova notação posicional para representar números inteiros. Ele o apelidou de "A Curious Method" ("Um Método Curioso"), representado pela sigla ACM. A notação ACM usa os mesmos dígitos que a notação decimal, isto é, de 0 a 9.
Para converter um número A da notação ACM para a notação decimal, você deve adicionar k termos, onde k é o número de dígitos de A (na notação ACM), O valor do i-ésimo termo, correspondente ao i-ésimo dígito ai, contando da direita para a esquerda, é ai × i!. Por exemplo, 719ACM é equivalente a 5310, já que 7 × 3! + 1 × 2! + 9 × 1! = 53.
Mateus acabou de iniciar seus estudos sobre teoria dos números, e provavelmente não sabe quais propriedades um sistema numérico deve ter, mas no momento, ele só está interessado em converter um número de ACM para decimal. Você pode ajudá-lo?
Linguagens: C e C++
Solução:
Os códigos em C e C++ seguem a mesma lógica. Basta utilizar a fórmula do fatorial ACM sempre pegando o resto do número acm por 10 (ou seja, o último dígito) e multiplicando pelo fatorial, sempre dividindo o número acm por 10 para ir sempre pegando o último dígito até que não reste mais número.
Código em C:
#include <stdio.h> int main() { int numeroACM, digitos, fatorial, resposta; while(1) { scanf("%i", &numeroACM); if (numeroACM == 0) break; digitos = 1; fatorial = 1; resposta = (numeroACM % 10) * fatorial; while (numeroACM > 9) { numeroACM /= 10; digitos++; fatorial *= digitos; resposta += (numeroACM % 10) * fatorial; } printf("%i\n", resposta); } return 0; }
#include <iostream> using namespace std; int main() { int numeroACM, termo, digitos, fatorial, resposta; while(1) { cin >> numeroACM; if (numeroACM == 0) break; digitos = 1; fatorial = 1; resposta = (numeroACM % 10) * fatorial; while (numeroACM > 9) { numeroACM /= 10; digitos++; fatorial *= digitos; resposta += (numeroACM % 10) * fatorial; } cout << resposta << endl; } return 0; }
Nenhum comentário:
Postar um comentário