Hola a todos, hoy os voy a explicar como podemos convertir un numero octal a decimal y viceversa en C#.
Si queremos pasar de decimal a octal, es proceso normal es el siguiente:
- Cogemos el modulo de 8 de ese numero.
- Multiplicamos ese numero por 10 elevado al indice correspondiente.
- Lo sumamos al total.
- Dividimos el numero entre 10.
- Repetimos el proceso anterior hasta llegar a 0.
El código para pasar de decimal a octal:
public static long decimalOctal(int numero) { long octal = 0; const int DIVISOR = 8; long digito = 0; for (int i = numero % DIVISOR, j = 0; numero > 0; numero /= DIVISOR, i = numero % DIVISOR, j++) { digito = i % DIVISOR; octal += digito * (long)Math.Pow(10, j); } return octal; }
Si queremos pasar de decimal a octal, es proceso normal es el siguiente:
- Cogemos el modulo de 10 de ese numero.
- Multiplicamos ese numero por 8 elevado al indice correspondiente.
- Lo sumamos al total.
- Dividimos el numero entre 10.
- Repetimos el proceso anterior hasta llegar a 0.
- Si en cualquier momento, la cifra no esta entre 0 y 7, retornamos un -1 para indicar que esta mal.
El código para convertir de octal a decimal:
public static int octalDecimal(long octal) { int numero = 0; int digito = 0; const int DIVISOR = 10; for (long i = octal, j = 0; i > 0; i /= DIVISOR, j++) { digito = (int)i % DIVISOR; if (!(digito >= 0 && digito <= 7)) { return -1; } numero += digito * (int)Math.Pow(8, j); } return numero; }
Os dejo un pequeño ejemplo:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Funciones4 { class Program { static void Main(string[] args) { Console.WriteLine("Escribe un numero decimal"); int numero = Convert.ToInt32(Console.ReadLine()); long octal = decimalOctal(numero); Console.WriteLine("El numero decimal " + numero + " en octal es " + octal); int decimalO = octalDecimal(octal); Console.WriteLine("El numero octal " + octal + " en decimal es " + decimalO); Console.ReadLine(); } public static long decimalOctal(int numero) { long octal = 0; const int DIVISOR = 8; long digito = 0; for (int i = numero % DIVISOR, j = 0; numero > 0; numero /= DIVISOR, i = numero % DIVISOR, j++) { digito = i % DIVISOR; octal += digito * (long)Math.Pow(10, j); } return octal; } public static int octalDecimal(long octal) { int numero = 0; int digito = 0; const int DIVISOR = 10; for (long i = octal, j = 0; i > 0; i /= DIVISOR, j++) { digito = (int)i % DIVISOR; if (!(digito >= 0 && digito <= 7)) { return -1; } numero += digito * (int)Math.Pow(8, j); } return numero; } }
Espero que os sea de ayuda. Si tenéis dudas, preguntad. Estamos para ayudarte.
Deja una respuesta