Pesquisar este blog

Livros Recomendados

domingo, 14 de fevereiro de 2021

URI (BEECROWD) - 1429 - Fatorial de Novo! - Matemática - C e C++

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)

Problema1429


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;
}

Código em C++:

#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

Postagem em destaque

URI (BEECROWD) - 2158 - Helping Uncle Cláudio (Ajudando o Tio Cláudio) - Matemática - C, C++ e Haskell

Buenas! Estou aqui mais uma vez para resolver um problema de Matemática! Agora tenho resolvido alguns dessa categoria, pra que vocês possam ...

Postagens mais visitadas