C# - Números de Armstrong
Hoje vamos veremos como calcular o número de Armstrong |
Sabe o que é um número de Armstrong ?
O conceito da Álgebra para um número de Armstrong diz que um número de Armstrong :
"É um número de n dígitos que é igual a soma de cada um dos seus dígitos elevado a n-ésima potência "
Por exemplo, 153 (n = três dígitos) é igual a 1^3 + 5^3 + 3^3 = 1 + 125 + 27 = 153
Outros exemplos são:
370=3^3+7^3+0^3 e 371=3^3+7^3+1^3 e 407=4^3+0^3+7^3
Existem 6 números de Armstrong entre 0 e 999.
Eles são: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 153, 370, 371, 407
Uma relação mais completa dos número de Armstrong pode ser vista abaixo:
1, 2, 3, 4, 5, 6, 7, 8, 9, 153, 370, 371, 407, 1634, 8208, 9474, 54748, 92727, 93084, 548834, 1741725, 4210818, 9800817, 9926315, 24678050, 24678051, 88593477, 146511208, 472335975, 534494836, 912985153, 4679307774, 32164049650, 32164049651 , etc.
Existem apenas 88 números de Armstrong na base 10, dos quais o maior é : 115.132.219.018.763.992.565.095.597.973.971.522.401 com 39 dígitos. (http://en.wikipedia.org/wiki/Narcissistic_number )
Nota: Quando você for tratar números muito grandes você deve estar atento aos limites dos tipos de dados da plataforma .NET. (veja o link : tabela de tipos )
Criando o projeto .NET Core
Vamos criar um projeto .NET Core do tipo Console App(.NET Core) com o nome CSharp_Numeros_Armstrong.
Os namespaces usados no projeto são:
using static System.Console;
using System;
Vamos mostrar 2 formas distintas de tratar com os números de Armstrong:
Defina o método Armstrong999() na classe Program e inclua o código abaixo:
private static void Armstrong999() { int a, b, c, d; WriteLine("Números de Armstrong entre 1 e 999 \n"); for (int numero = 1; numero <= 999; numero++) { a = numero / 100; b = (numero - a * 100) / 10; c = (numero - a * 100 - b * 10); d = a * a * a + b * b * b + c * c * c; if (numero == d) { WriteLine($"{numero}"); } } } |
Executando o código acima iremos obter:
Vamos incluir uma classe no projeto chamada NumeroArmstrong() com o código abaixo:
namespace CSharp_Numeros_Armstrong
{
public class NumeroArmstrong
{
// Método para calcular a potência de um numero elevado a outro
int Potencia(int x, long y)
{
if (y == 0)
return 1;
if (y % 2 == 0)
return Potencia(x, y / 2) *
Potencia(x, y / 2);
return x * Potencia(x, y / 2) *
Potencia(x, y / 2);
}
// Método para calcular a ordem do numero
int Ordem(int x)
{
int n = 0;
while (x != 0)
{
n++;
x = x / 10;
}
return n;
}
// Verifica se o numero é um Número de Armstrong
public bool IsArmstrong(int x)
{
// chama o método para calcular a ordem do numero
int ordem = Ordem(x);
int temp = x, soma = 0;
while (temp != 0)
{
int resto = temp % 10;
soma = soma + Potencia(resto, ordem);
temp = temp / 10;
}
// a condição foi satisfeita retorna true
return (soma == x);
}
}
}
|
Nesta classe temos 3 métodos:
Esses 3 métodos são usados para permitir verificar se um número é ou não é um número de Armstrong.
Agora basta definir o método IsArmstrong() na classe Program incluindo o código abaixo:
private static void IsArmstrong() { NumeroArmstrong numArmstrong = new NumeroArmstrong(); Console.Write("Informe o número inteiro : ");
int numero = Convert.ToInt32(Console.ReadLine());
if(numArmstrong.IsArmstrong(numero))
WriteLine($"O número {numero}, é um número de Armstrong");
else
WriteLine($"O número {numero}, NÃO é um número de Armstrong");
}
|
Executando o código acima iremos obter:
No método Main da classe Program inclua o código:
static void Main(string[] args) { Armstrong999(); IsArmstrong(); ReadLine(); } |
Neste método estamos invocando os dois métodos. Podemos comentar um e usar o outro e vice-versa.
Pegue o projeto aqui: CSharp_Numeros_Armstrong.zip
João
14:21
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? |
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Super DVD C# - Recursos de aprendizagens e vídeo aulas para C#
Curso Fundamentos da Programação Orientada a Objetos com VB .NET
Criando uma proteção de tela - Macoratti
VB .NET - Números de Armstrong - Macoratti
C# - Resolvendo 10 problemas de matemática em uma ... - Macoratti.net
C# - Convertendo Números para valores Reais em extenso ... - Macoratti
C# - Os doze trabalho de Hércules - 12 Desafios cumpridos - Macoratti