Ir ao conteúdo

C Exercicio para imprimir o contrário de um número lido


Ir à solução Resolvido por 1freakday,

Posts recomendados

Postado

Olá!

Estou fazendo um programa que mostre o contrário de um número inserido pelo usuário. Porém estou com dificuldade quanto aos números que comecem com mais de um zero como por exemplo: 0001 que deve retornar 1000. Eu consegui resolver somente para o 01, mas quando contem mais zeros eu não consigo o resultado. Para medir o tamanho do número digitado eu uso a seguinte função: 

int intlen(int num){
	int count=0, countz = 0;
	while(num != 0){
		count += 1;
		num /= 10;
		if(num == 0) countz+=1; //descobrir a quantidade do zeros
	}
	return count + countz;
}

O if é onde eu consigo descobrir o zero, porém ele não vai funcionar obviamente devido a falta de um laço que é o que deveria funcionar, porém ocorre o oposto e o programa fica em looping. Então se alguém conseguir me ajudar nisso, agradeço muito.

  • Solução
Postado

@Lucas Da Silva Rezende

Na forma como você está fazendo, você apenas descobre os zeros e divide, não está invertendo.

 

Você pode usar o mesmo que notação ou pares.  Usando % você pode sempre obter o resto, ou seja, o ultimo numero.Por exemplo:

 

Vamos supor que você receba os dígitos 213 na variável num. Usando %, podemos pegar 3, 1 e 2 na sequência, assim:

 

1 - Usamos % em 213 por 10, ficando:       21,3

//213 = 21,3 = 3
resto = (num % 10);

 

 

2 - Assim recebemos 3, e acrescentamos a uma variável de retorno ( que será o nosso resultado final ).

//puxa a variavel para o final
resultado *= 10; 
//se o resto for maior que zero, ascrescenta a variavel
//se for zero, continua igual
resultado = (resto > 0 ? (x+y):x);

3 - Agora num precisa ser dividido por 10, para eliminar o ultimo valor e, para ser verificado pelo while.

num /= 10;

 

4 - Sobra 21, e dividindo por 10, fica:  2,1

Apenas repita o 2 e o 3 caso no while.

 

 

 

 

.....

Segue o código:

int intlen(int num){ 
        int x = 0, y = 0;
		//se num for 0, não tem mais o que fazer...
        while(num > 0){ 
                y = num % 10;
                num /= 10;
                //multiplica por 10, para adicionar 0
                x = (y > 0 ? ((x*10)+y):(x*10));
        }
        return x;
}

 

 

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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 comunidades 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

×
×
  • Criar novo...

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!