Duvida basico

6 respostas
Aganiuipuque

Em um exercicio foi pedido para que eu invertesse a ordem de um numero inteiro:

int i=123456789;

Qual a logica deste programa usando while ?

Como inverter um inteiro???

Alguém poderia me ajudar?

6 Respostas

hmichel

Cara, inverter um inteiro pode ser, como o exemplo de resolução abaixo, escreve-lo de traz para frente. Em relação ao while, é que o processo irá continuar rodando até a condição ser satisfeita.

/*
 * Teste.java
 *
 * Created on 14 de Novembro de 2004, 19:07
 */

/**
 *
 * @author  hmichel
 */
public class Teste {
    
    /** Creates a new instance of Teste */
    public Teste() {
    }
    
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        //Valor a ser convertido
        int n = 123456789;
        
        //Valor a ser convertido, porém como String
        String st = String.valueOf( n );
        
        //índice do caracter a ser obtido
        int i = 0;
        //O número invertido gerado
        String newSt = "";
        while ( i < st.length() ){
            newSt = st.charAt( i ) + newSt;
            i++;
        }
        
        System.out.println( newSt );
    }
    
}
Aganiuipuque

Hmichel,

Achei que existisse outra forma de fazer isto sem ter que passar para String.
Até imaginei que fosse assim, mas não foi mencionado isto no exercicio.

Valeu!!

hmichel

Olha, realmente não me lembro de outra forma de se fazer isto. Se por acaso você descobrir, posta ai para enriquecermos o post.

[]´s

vivi_grieco

Há tbm essa outra forma, sem utilizar while e utilizando StringBuffer:

/**
 * @author Viviane Grieco
 * 
 */
public class Teste {
	public static void main(String args[] ) {
		// numero
		int n = 123456;

		// transforma em String o numero
		String str = String.valueOf(n);

		// transforma em StringBuffer a String para poder inverter
		StringBuffer sb = new StringBuffer(str);

		// metodo que inverte a String: sb.reverse()
		System.out.println("Numero invertido: " + sb.reverse());
	}
}

[]'s

pcalcado

Me preocupa quando programadores esquecem algoritmos e confiam tudo na API…

Umo jeito bem porco:

Para pegar o último algarismo, divida o número por 10, guarde num float ou double para não perder a casa decimal. Depis arredonde o valor para um inteiro, diminua o double deste int, multiplique o resultado por 10 e você tem o último algarismo.

Para monter o invertido, pegue o último algarismo (o que você descobriu primeiro), multiplique-o por (10 elevado a <numero de algarismos - 1>), assim se o último foi 5 e você tinha 3 algarismos, vai ser 5 * (10²)=500. Depois você pega penúltimo e multiplica por (10 elevado a <numero de algarismos -2>), se o penúltimo fosse 3 seria 3 * (10¹)=30, e some os números: 500+30=530.

Certamente se você pensar/pesquisar vai achar um jeito mais simples de fazer isso, principalmente se considerar que eu sou uma ameba em cálculo :lol:

[]s

T

Só explicando o que o pcalcado quis dizer…

class Test165 {
    public static void main(String[] args) {
        int n = Integer.parseInt (args[0]);
        if (n < 0) { 
            n = -n; 
            System.out.print ("-");
        }            
        while (n > 0) {
            int d = n % 10;
            System.out.print (d);
            n = n / 10;
        }
        System.out.println ();
    }
}

Obviamente como um “int” é um número relativamente pequeno (de -[telefone removido] a +[telefone removido]) você não pode passar qualquer número como parãmetro. Curiosidade - o que ocorre se você passar exatamente -[telefone removido] para o programa acima?

Criado 14 de novembro de 2004
Ultima resposta 16 de nov. de 2004
Respostas 6
Participantes 5