[Ajuda] Programa - Numeros Magicos

2 respostas
S

Galera, preciso fazer um programa em java com as seguintes especificações:

Tenho que fazer um programa que execute as seguintes ações:

Chamamos números mágicos relativos a um inteiro N > 0 qualquer par de números inteiros positivos, n1 e n2, tais que nenhum deles tenha qualquer dígito repetido e n1/n2 seja igual ao inteiro N.
Descrição:
Faça um programa que leia do teclado um número inteiro N. Após a leitura de N, seu programa deve imprimir todos os números mágicos relativos a N. Isto é, seu programa deve imprimir, no formato indicado no exemplo abaixo, todos os pares de números inteiros positivos n1 e n2 tais que n1/n2 = N.
Ao final, seu programa deve imprimir a mensagem:
Gerou XXX pares de números.
Onde XXX corresponde à quantidade de pares de números mágicos impressos pelo programa.
Se o usuário digitar um número para o qual não há números mágicos, seu programa deve imprimir a mensagem:
Não há números mágicos.
Após imprimir os números mágicos relativos a um número N e/ou a mensagem final correspondente, seu programa deve reiniciar o procedimento, voltando a ler um novo número do teclado.
Quando o usuário digitar o número 0 (zero), seu programa deve parar, imprimindo a mensagem:
Fim de programa.

Assunções e restrições:
(1) Seu programa pode imprimir uma mensagem inicial solicitando a digitação de um número inteiro.
(2) O usuário sempre irá digitar um número inteiro. Não é necessário tratar erros de formato.
(3) Assuma que o usuário pode digitar um inteiro longo.
(4) Os pares de números mágicos n1 / n2 devem ser impressos sempre com o maior número à esquerda, como mostrado no exemplo abaixo.
(5) Não deve haver linha em branco entre as mensagens relativas a um mesmo procedimento (um mesmo número lido). Deve haver uma linha em branco entre um procedimento e outro.

Exemplos:
A saída abaixo ilustra uma possível execução do programa, em que são digitados quatro números:

Digite um número inteiro: [telefone removido]
[telefone removido] / 1 = [telefone removido]
[telefone removido] / 2 = [telefone removido]
[telefone removido] / 4 = [telefone removido]
[telefone removido] / 5 = [telefone removido]
[telefone removido] / 7 = [telefone removido]
[telefone removido] / 8 = [telefone removido]
Gerou 6 pares de números.

Digite um número inteiro: -56744
Não há números mágicos.

Digite um número inteiro: 10345678
10345678 / 1 = 10345678
51728390 / 5 = 10345678
951802376 / 92 = 10345678
Gerou 3 pares de números.

Digite um número inteiro: 0
Fim de programa.

Meu programa fica "preso" durante a varredura das strings sn1 e sn2.
Alguém tem alguma sugestão?

import java.util.*;
public class Magicos {
public static void main(String[] args){
    Scanner tec = new Scanner(System.in);
    long N, n1, n2, cont;
    String sn1, sn2;
    int i,j,k,l,fim,tamanho;
    fim = 0;
    cont = 0;
    N = 1;
    n2 = 1;
    long MAX = 987654321; // maior numero possivel sem algarismos repetidos
    while(N != 0)
    {

            System.out.println("Digite um numero inteiro: ");
            N = tec.nextLong();
            n1 = n2*N;
            if(N==0)
            {
            break;
            }
            else
            {
            
            sn1 = Long.toString(n1);
            sn2 = Long.toString(n2);
            tamanho = sn2.length();
            
            
            // varredura das strings
            while (fim == 0){
            
                // String de n2
            for(k=0; k< sn2.length();k++){

                for(l=k+1; l<sn2.length();l++){
                    
                    if (sn2.charAt(k)== sn2.charAt(l)){fim = 1;

                break;
                }}
                    }
                // String de n1
            for(i=0; i>< sn1.length();i++){


                for(j=i+1; j<sn1.length();j++){
                    if (sn1.charAt(i)== sn1.charAt(j)){fim =1;

                    break;
                }
                    }
                }

                // Impressão na tela
                if(fim == 1)
                {
                    if(n1 > n2){
                        System.out.println(n1+" / "+n2+" = "+N);
                        cont++;
                    }
                    else{
                        System.out.println(n1+" / "+n2+" = "+N);
                        cont++;
                    }

                }
            }
            }
            // Fim da varredura das Strings

            
            
            if (cont>0){ System.out.println("Foram encontrados "+cont+" pares de numeros");}
            n2++;
            if(n2*N >= MAX){fim = 1;}
        }
System.out.println("Fim do Programa!");
    }
}

2 Respostas

T

Você está tentando resolver o mesmo problema dele:
http://www.guj.com.br/posts/list/126655.java

S

hum…
sim, apesar dos códigos apresentarem problemas em partes diferentes

Criado 15 de maio de 2009
Ultima resposta 15 de mai. de 2009
Respostas 2
Participantes 2