Jump to content
luizaugustomm

[Dúvida] Maior tipo de dados inteiro em C

Recommended Posts

luizaugustomm

Olá, pessoal.

Estou resolvendo uns problemas para treinar para a olimpíada de programação da minha região aqui no Brasil.

Eu fui resolver este problema:http://br.spoj.pl/problems/ONZE/a, que até não é muito difícil.

Consegui implementar o algoritmo em C, só que encontrei um problema: precisei guardar em uma variável o valor 10^1000. Eu utilizei o tipo de dados long long int, só que como eu usei a função lpow() para calcular a potência, tive que fazer um cast, pois esta função retorna um valor do tipo long double.

Bom, eu acho que o problema se resume a isso, eu não sei como fazer com que o cálculo da potência 10^1000 possa ser guardado numa variável do tipo inteiro sem perder seu valor correto.

Segue o código em C:

#include <stdio.h>
#include <math.h>

int main() {
    long n, nn;
    long long int tamanhoMaximo = (long long int) powl(10, 1000); //Esta é a operação em questão
    char resto;
    int i;

    do {
        scanf("%ld", &n);
        if ((n > 0) & (n < tamanhoMaximo)) {
            nn = n;
            while (nn >= 100) {
                resto = nn % 10;
                nn = nn / 10 - resto;
            }
            if (nn % 11 == 0) {
                printf("%ld is a multiple of 11.\n", n);
            }
            else {
                printf("%ld is not a multiple of 11.\n", n);
            }
        }
    } while (n);
    return 0;
}

Bom, pessoal, espero que vocês possam me ajudar a resolver este problema.

Se alguém souber, também poderia me dizer quais são todos os tipos de dados em C? Só a título de curiosidade.

Obrigado.

Share this post


Link to post
Share on other sites
pedrosorio

C não tem nenhum tipo de dados que permita guardar números dessa forma: http://pt.wikipedia.org/wiki/C_(linguagem_de_programa%C3%A7%C3%A3o)#Tipos_de_dados

Se tivesse bastar-te-ia fazer:

if(num%11 == 0)
     é múltiplo
else
     não é múltiplo

Tens que fazer um algoritmo que te permita verificar se o número é múltiplo de 11 "à mão", ou seja, usando a representação do número em string e olhando para cada caracter.


Não respondo a dúvidas por mensagem.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.