none
Problemas na função para converter ints em numeração romana RRS feed

  • Pergunta

  • string romana (double n)
            {
                int unidades, centenas, dezenas;
                String nr = String.Empty;
                //criação das variaveis
    
                centenas = (int)(n / 100);
                n = n - centenas * 100;
                // calcular e tirar centenas do numero
    
                dezenas = (int)n * 10;
                n = n - dezenas * 10;
                //calcuar e tirar dezenas do numero
    
                unidades = Convert.ToInt32(n);
                //unidades
    
                switch (centenas)
                {
                    case 1: nr = "C"; break;
                    case 2: nr = "CC"; break;
                    case 3: nr = "CCC"; break;
                    case 4: nr = "CD"; break;
                    case 5: nr = "D"; break;
                }
    
                switch (dezenas)
                {
                    case 1: nr = nr + "X"; break;
                    case 2: nr = nr + "XX"; break;
                    case 3: nr = nr + "XXX"; break;
                    case 4: nr = nr + "XL"; break;
                    case 5: nr = nr + "L"; break;
                    case 6: nr = nr + "LX"; break;
                    case 7: nr = nr + "LXX"; break;
                    case 8: nr = nr + "LXXX"; break;
                    case 9: nr = nr + "XC"; break;
                }
    
                switch (unidades)
                {
                    case 1: nr = nr + "I"; break;
                    case 2: nr = nr + "II"; break;
                    case 3: nr = nr + "III"; break;
                    case 4: nr = nr + "IV"; break;
                    case 5: nr = nr + "V"; break;
                    case 6: nr = nr + "VI"; break;
                    case 7: nr = nr + "VII"; break;
                    case 8: nr = nr + "VIII"; break;
                    case 9: nr = nr + "IX"; break;
                }
    
                return nr;
    
            }
    Desenvolvi uma função para devolver o número inserido pelo utilizador em númeração romana, no entanto apenas devolve as centenas
    • Editado joanaf7 quinta-feira, 20 de setembro de 2018 15:44
    quinta-feira, 20 de setembro de 2018 14:57

Respostas

  • Olá programador,

    Tente o seguinte usando StringBuilder:

    StringBuilder = new StringBuilder(""); //Variável global. Importa System.Text.

    private string ConverterRomano(double n)
            {
                int unidades, centenas, dezenas; //criação das variaveis

                centenas = (int)(n / 100);
                dezenas = ((int)n - ((centenas * 100))) / 10;  //calcuar e tirar dezenas do numero
                unidades = (int)n - ((centenas * 100) + (dezenas * 10)); //unidades

                switch (centenas)
                {
                    case 1: nr.Append("C"); break;
                    case 2: nr.Append("CC"); break;
                    case 3: nr.Append("CCC"); break;
                    case 4: nr.Append("CD"); break;
                    case 5: nr.Append("D"); break;
                }

                switch (dezenas)
                {
                    case 1: nr.Append("X"); break;
                    case 2: nr.Append("XX"); break;
                    case 3: nr.Append("XXX"); break;
                    case 4: nr.Append("XL"); break;
                    case 5: nr.Append("L"); break;
                    case 6: nr.Append("LX"); break;
                    case 7: nr.Append("LXX"); break;
                    case 8: nr.Append("LXXX"); break;
                    case 9: nr.Append("XC"); break;
                }

                switch (unidades)
                {
                    case 1: nr.Append("I"); break;
                    case 2: nr.Append("II"); break;
                    case 3: nr.Append("III"); break;
                    case 4: nr.Append("IV"); break;
                    case 5: nr.Append("V"); break;
                    case 6: nr.Append("VI"); break;
                    case 7: nr.Append("VII"); break;
                    case 8: nr.Append("VIII"); break;
                    case 9: nr.Append("IX"); break;
                }

                return nr.ToString();

            }

    Se te ajudou, marque a resposta.

    quinta-feira, 20 de setembro de 2018 16:13
  • Boa tarde,

    joanaf7, experimente alterar a linha onde é calculada a dezena:

               dezenas = (int)n / 10;

    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br

    quinta-feira, 20 de setembro de 2018 16:17

Todas as Respostas

  • Olá programador,

    Tente o seguinte usando StringBuilder:

    StringBuilder = new StringBuilder(""); //Variável global. Importa System.Text.

    private string ConverterRomano(double n)
            {
                int unidades, centenas, dezenas; //criação das variaveis

                centenas = (int)(n / 100);
                dezenas = ((int)n - ((centenas * 100))) / 10;  //calcuar e tirar dezenas do numero
                unidades = (int)n - ((centenas * 100) + (dezenas * 10)); //unidades

                switch (centenas)
                {
                    case 1: nr.Append("C"); break;
                    case 2: nr.Append("CC"); break;
                    case 3: nr.Append("CCC"); break;
                    case 4: nr.Append("CD"); break;
                    case 5: nr.Append("D"); break;
                }

                switch (dezenas)
                {
                    case 1: nr.Append("X"); break;
                    case 2: nr.Append("XX"); break;
                    case 3: nr.Append("XXX"); break;
                    case 4: nr.Append("XL"); break;
                    case 5: nr.Append("L"); break;
                    case 6: nr.Append("LX"); break;
                    case 7: nr.Append("LXX"); break;
                    case 8: nr.Append("LXXX"); break;
                    case 9: nr.Append("XC"); break;
                }

                switch (unidades)
                {
                    case 1: nr.Append("I"); break;
                    case 2: nr.Append("II"); break;
                    case 3: nr.Append("III"); break;
                    case 4: nr.Append("IV"); break;
                    case 5: nr.Append("V"); break;
                    case 6: nr.Append("VI"); break;
                    case 7: nr.Append("VII"); break;
                    case 8: nr.Append("VIII"); break;
                    case 9: nr.Append("IX"); break;
                }

                return nr.ToString();

            }

    Se te ajudou, marque a resposta.

    quinta-feira, 20 de setembro de 2018 16:13
  • Boa tarde,

    joanaf7, experimente alterar a linha onde é calculada a dezena:

               dezenas = (int)n / 10;

    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br

    quinta-feira, 20 de setembro de 2018 16:17