Поиск библиотеки преобразования десятичных чисел в буквенно-цифровые числа в Visual Basic (или алгоритм псевдокода) БЕЗ рекурсии - PullRequest
0 голосов
/ 16 марта 2012

Я ищу библиотеку для преобразования десятичных чисел в буквенно-цифровые числа в Visual Basic, которая не использует рекурсию.

Я нашел: http://visualstudiomagazine.com/articles/2010/07/20/when-hexadecimal-is-not-enough.aspx

, которое включает демонстрационное приложение, но обнаружило, что оно использует рекурсию. Проблема с использованием рекурсии стала очевидной, когда я попытался интегрировать библиотеку в свой собственный проект Visual Studio Express 2010 Visual Basic: я получил исключение переполнения стека.

Теперь я мог бы рассмотреть вопрос об увеличении размера памяти, выделенной для стека, но может быть трудно определить, что это будет, учитывая, что глубина рекурсии может варьироваться в зависимости от значения, которое нужно преобразовать.

Моя ситуация требует надежного детерминированного решения, поэтому я бы предпочел не принимать во внимание идею использования рекурсии.

Я сделаю больше исследований и попытаюсь написать алгоритм с нуля, но предпочел бы не заново изобретать колесо, если оно уже существует, поэтому и возникает этот вопрос. Поиск здесь не совсем дал мне то, что я искал.

Можете ли вы указать мне направление существующей нерекурсивной библиотеки десятичных и буквенно-цифровых преобразователей в Visual Basic?

1 Ответ

0 голосов
/ 16 марта 2012

Похоже, это решение, которое я предоставляю себе, тоже работает! Но это потому, что это одностороннее обращение; другие библиотеки стремятся к двустороннему преобразованию, туда и обратно между разными базами, но мне не нужны оба пути.


Public Class BaseConverter


    Public Shared Function ConvertToBase(num As Integer, nbase As Integer) As String

        Dim retval = ""

        Dim chars As String = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"

        ' check if we can convert to another base
        If (nbase  chars.Length) Then
            retval = ""
        End If

        Dim r As Integer

        Dim newNumber As String = ""

        ' in r we have the offset of the char that was converted to the new base
        While num >= nbase
            r = num Mod nbase
            newNumber = chars(r) & newNumber

            'use: num = Convert.ToInt32(num / nbase)
            '(if available on your system)
            'otherwise:
            num = num \ nbase
            ' notice the back slash \ - this is integer division, i.e the calculation only reports back the whole number of times that
            ' the divider will go into the number to be divided, e.g. 7 \ 2 produces 3 (contrasted with 7 / 2 produces 3.5, 
            ' float which would cause the compiler to fail the compile with a type mismatch)
        End While

        ' the last number to convert
        newNumber = chars(num) & newNumber

        Return newNumber
    End Function


End Class

Я создал вышеуказанный код в Visual Basic на основе кода C # по следующей ссылке:

КРЕДИТ: http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/5babf71f-4375-40aa-971a-21c1f0b9762b/ («Преобразование из десятичной (основание-10) в буквенно-цифровую (основание-36)»)


public String ConvertToBase(int num, int nbase)
{
    String chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";

    // check if we can convert to another base
    if(nbase  chars.Length)
        return "";

    int r;
    String newNumber = "";

    // in r we have the offset of the char that was converted to the new base
    while(num >= nbase)
    {
        r = num % nbase;
        newNumber = chars[r] + newNumber;
        num = num / nbase;
    }
    // the last number to convert
    newNumber = chars[num] + newNumber;

    return newNumber;
}

@ assylias Я не смог заставить devx.com / vb2themax / Tip / 19316 работать - я вернул неправильное значение. Спасибо за предложение.

Нет доказательств того, что это работает. Я настроил некоторые объявления и поверхностную структуру кода, чтобы он успешно создавался в Visual Studio Express 2010 Visual Basic. Затем пошагово прошелся по коду в отладчике Visual Studio Express 2010 Visual Basic. Код трудно понять: имена переменных неочевидны, нет комментариев о том, почему они делают то, что делают. Из того, что я понял, это было похоже на то, что для базового преобразования это не должно быть так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...