Pesquisar este blog

Livros Recomendados

Mostrando postagens com marcador 1429. Mostrar todas as postagens
Mostrando postagens com marcador 1429. Mostrar todas as postagens

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

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