Closed Lublanski closed 3 years ago
Eu tive o mesmo problema #77 . Acredito que alguns números acabam sendo maiores do que cabe num int, portando usei a função atol(), que em vez de int, converte para long int.
Boa meu bom deu certo. Tmj
@Lublanski @DarthFelpa um long long int armazed=na um número até 10²¹.
Notem que a maior entrada possível do lab é um número de tamanho 10²² e, portanto, não cabe nem mesmo em um long long int (que é a maior representação possível de um inteiro positivo em C).
professor, eu utilizei a função atol(), e conseguiu armazenar o número. O problema era que a função atoi(), descrita no lab, não funciona pq tem limite de um número com 10¹⁰. A função atol() funciona pq tem um limite maior, e nos testes mesmo uma entrada grande como 10²², o número k pede para tirar vários digitos, diminuindo esse número. Mas voltando ao lab, ficou muito confuso o jeito da saida, pq no próprio lab falou que temos que receber um inteiro e a saída deve ser um inteirto também, mas se um long long int não aguenta o número de casas, deveríamos printar como string, e se temos que printar como string, a saída não é um inteiro e sim uma string. Foi isso que ficou confuso, pelo menos para mim.
Ambos são números que estão no domínio dos inteiros (um número que pode ser escrito sem seu componente fatorial).
A representação computacional deles é outra história
A minha solução inicial para este problema envolvia representar cada char da string de entrada em um inteiro de um único dígito e armazenar estes em uma pilha. A solução do problema viria facilmente sobre operações nesta pilha criada. Deste modo, somente a função atoi seria utilizada.
Entendi. É porque, quando fiz 102, tinha alguns labs que mesmo quando a saída era um número, mas este era uma string, o lab dizia que a saída era uma string. Quem printasse um int na saída passava no susy mas quando o professor corrigia ele descontava nota. Por isso a minha dúvida.
A minha filosofia é um pouco diferente. Desde que vocês saibam processar corretamente a entrada e transformar em uma saída legível no formato pedido, eu realmente não me importo com o tipo de variável da saída (int, double, float, string, etc).
O importante é que todos aprendam as etapas necessárias para transformar o input dado no output desejado e as estruturas de dados utilizadas neste processo.
Entendi professor. Obrigado
Você pode obter o valor inteiro que o "char numérico" representa subtraindo o valor do char '0'. Por exemplo, se tu tem um char c = '5' ;
e quer transformar esse valor para inteiro, basta atribuir int x = c - '0';
Acho que já tá meio tarde para falar isso, mas caso você não sabia, fica a dica ai tbm :)
Note que sabendo essa informação, fazer sua própria função "atoi(x)" se torna bem fácil (caso não ache isso, recomendo tentar para treinar um pouco).
Professor, estou usando a função atoi para transformar a string em um int, mas parece que ele só aguenta 10 casas decimas, e tem testes com mais casas do que isso, ai a saida sai incorreta, posso printar como string mesmo?