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:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
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:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
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:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
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