Faça um laço for
que inicia uma variável com o valor 1000
e incremente-a enquanto ela for menor que 9999
.
Para dividir os números (3025 virar 30 e 25), você pode transformar o número em uma String usando a classe Integer
e dividi-la em 2 partes usando o método String.substring()
. Depois disso, você pode transformar as Strings divididas em números usando, também, a classe Integer
.
O final é fácil: Some os números e eleve essa soma ao quadrado usando Math.pow()
e verifique se o resultado é igual ao número que o laço for
te deu, aquele que você dividiu no meio.
Se for igual, imprime esse número.
Caso tenha dúvida na utilização dos métodos, tem muitos tutoriais e documentação na internet, não precisa nem pesquisar muito.
Não precisa dar essa volta toda. Transformar o número em string, para depois pegar partes dessa string e converter de volta para número é uma volta desnecessária, além de ser muito mais ineficiente (por ficar alocando várias strings à toa), na minha humilde opinião não é a melhor solução. *
Dá pra resolver de forma muito mais simples (e eficiente) usando a boa e velha matemática. Como os números estão todos entre 1000 e 9999, então eles sempre têm 4 dígitos. Assim, para pegar os dois primeiros, basta dividir por 100. E para obter os dois últimos, basta pegar o resto da divisão por 100.
Depois é só somar, elevar ao quadrado e ver se é igual ao número original:
for (int n = 1000; n <= 9999; n++) {
int parte1 = n / 100; // os 2 primeiros dígitos
int parte2 = n % 100; // os 2 últimos dígitos
int soma = parte1 + parte2;
if (soma * soma == n) { // se o quadrado da soma é igual ao número, imprime
System.out.println(n);
}
}
A saída é:
2025
3025
9801
* É claro que para um programa curto como esse, a diferença de desempenho será imperceptível, mas em programas maiores, ficar criando strings à toa gera alocações desnecessárias que podem sim afetar o desempenho. Geralmente a solução matemática é preferível nesses casos.
Não é que é verdade? Vivendo e aprendendo.