Ir ao conteúdo
  • Cadastre-se
lohayne27

C++ inversão de um numero inteiro positivo

Recommended Posts

Olá boa tarde,

Eu estou fazendo um exercício para inverter um numero(um numero da escolha do usuário) 

exemplo:1234 vira 4321

mas apesar do programa rodar,quando eu coloco 3 dígitos ou mais  ,os números aparecem invertidos ,mas o ultimo digito não aparece 

alguém poderia me ajudar?

 

 

#include <stdio.h>
#include <stdlib.h>


int main() {
    int n,cifra,i;
    int *v;
     v =(int*) malloc (n*sizeof(int));
    printf("digite um numero:");
    scanf("%i",&n);
    for (i=0;i<n;i++) {
    cifra=n%10;
    n=n/10;
    v=cifra;
    printf("%i",v );}
    return 0;}

  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@lohayne27    o comando for não ficou bom, por isso use do / while , então no lugar do for coloque assim :

do/*for(i=0;i<n;i++)*/{

e depois do printf coloque assim :

}while(n>0);

 

  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu consegui fazer o código rodar sem o vetor,mas não estou tendo ideia de como fazer isso usando vetor como me foi pedido no exercício

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@lohayne27      você quer usar vetor  ou  ponteiro   ?     esse que você colocou é um ponteiro e um vetor seria assim :

int vetor[100];

então no lugar de 

 cifra=n%10;

e dentro do do / while coloque assim :

vetor[i] = n%10;/* com vetor    */
v[i]     = n%10;/* com ponteiro */
i++;

e depois do while use um loop indo de zero até cont e imprima os números que estarão no vetor  informando a posição que o número está no vetor,  assim  :

printf("\nDigitos Invertidos Com Vetor ----> ");
for(i=0;i<cont;i++)
    printf("%d",vetor[i]);

 

  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

oi gente,boa noite

eu realmente dei uma "surtada"  na parte do FOR,mas refiz o código e fiz uma função para contar os dígitos.

Fiquei feliz até o oitavo digito ,pois quando o usuário insere um numero com  8 dígitos ou mais o programa imprime o numero invertido faltando o ultimo digito,o penúltimo...e assim sucessivamente.

isso é erro no código ou é devido ao fato de estar trabalhando com INT?

 

#include <stdio.h>
#include <stdlib.h>

 

// função para contar dígitos


int contdigitos(int n);

int main() {
    int n,i;
    int *v;
    int nd=contdigitos(n);


    //como vetor é dinâmico ,usei a função malloc
    v =(int*) malloc (nd*sizeof(int));
   printf("digite um numero:");
   scanf("%i",&n);
   for (i=0;i<nd;i++) {
    v=n%10;
    n=n/10;

    printf("%i",v );
    if (n<=0)
    break;}
    return 0;}

 

    int contdigitos(int n) {
    if (n < 10) {
    return 1;
    }
    int contador = 0;
    while (n > 0) {
        n /= 10;
        contador++;
    }
    return contador;
}

 

 

  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@lohayne27    para postar seu código é melhor usar o botão  <>  que está lá na barra de ferramentas da janela de responder, pois senão o código fica faltando alguns caracteres como os [ i ] que sumiram do seu código ,  e  você pode contar os dígitos do número sem necessidade dessa função  e o resultado dela nem foi usado,  então seu código com algumas modificações ficaria assim : 

#include <stdio.h>
#include <stdlib.h>
int contdigitos(int n);
int main() {
    int n,i=0,cont=0;
    int *v;
    /*int nd=contdigitos(n);*/
    /*//como vetor é dinâmico ,usei a função malloc*/
    v =(int*) malloc (n*sizeof(int));
    printf("digite um numero: ");
    scanf("%i",&n);
    while(n>0/*for (i=0;i<nd;i++*/){
        v[i]=n%10;
        n/=10;
        i++;
        cont++;
        /*printf("%i",v);*/
        /*if (n<=0)
        break;*/
    }
    printf("\nDigitos Invertidos Com Vetor ----> ");
    for(i=0;i<cont;i++)
        printf("%d ",v[i]);
    printf("\n\n");
    return 0;
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
#include <iostream>              // std::cout, std::cin
#include <string>                // std::string, std::to_string, std::stoi

int main()
{
    int num = 0;
    std::cout << "Insira um numero inteiro: ";
    std::cin >> num;

    std::string numStr = std::to_string(num), numInvertedStr;

    for (size_t i = numStr.size(); i--;) numInvertedStr.push_back(numStr[i]);

    std::cout << "Numero: " << std::stoi(numInvertedStr) << std::endl;

    system("pause");
    
    return 0;
}

Saída primeiro teste:

Citação

Insira um numero inteiro: 45678
Numero: 87654

 

Saída segundo teste:

Citação

Insira um numero inteiro: 1234
Numero: 4321

 

Saída terceiro teste:

Citação

Insira um numero inteiro: 51234
Numero: 43215

 

  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi gente,muito obrigada pela ajuda,o programa esta rodando de boa agora ;)

  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×