Базовый алгоритм изменения в c ++ / c

0

У меня есть следующая функция:

template <class T>
T c_base (T num,T second, T first = 10)
{
    T res = 0;
    T secnum;
    T bitseed[90];
    int i = 1,k,jump,anex,len;
    if(second==first)
    {
        res = num;
        return (res);
    }
    if(first==10&&second!=10)
    {
        anex = num;
        while(num>0)
        {
            jump = num/second;
            bitseed[i] = num%second;
            num/=second;
            i++;
        }
        if(anex>0)
        {
            for(k=i;k>=1;k--)
            {
                if(k==i&&jump==0) {res = bitseed[k-1]; k--; continue;}
                if(k==i&&jump!=0) {res = jump; continue;}
                res = res*10+bitseed[k];
            }
        }
        return (res);
    }

    if(second==10)
    {
        anex = num;
        len = 1;
        while(anex>=10)
        {
            len *= 10;
            anex/=10;
            i++;
        }
        anex = num;
        if(anex>0)
        {
            for(k=i;k>=1;k--)
            {
                res = res*first+anex/len;
                anex%=len;
                len/=10;
            }
        }
        return (res);
    }

    if(second!=10&&first!=10)
    {
        secnum = c_base <T> (num,10,first);
        res = c_base <T> (secnum,second,10);
        return (res);
    }
}

Мне было интересно, насколько он эффективен (как с точки зрения скорости, так и с точки зрения памяти) и как/если он может быть улучшен. (с точки зрения алгоритма)

Ps. Объяснение функции: c_base ("число", "база", "от базы" → необязательно);

  • 2
    ТАК не место для проверки кода.
  • 1
    Вы должны подумать, как сделать прямое преобразование из базы K в базу N, не проходя через базу 10 - возможно, база 2 ^ 32 или база 2 ^ 64 все равно нужны ...
Показать ещё 3 комментария
Теги:

1 ответ

1
Лучший ответ

Я вижу здесь много путаницы:

  • Число не имеет базы. Что есть основания - это числовые представления. Оба ввода и вывода должны представлять собой числовые представления (например, std::strings в C++).
  • Почему именно лечение базы 10? там нет ничего особенного, кроме того, что по историческим авариям большинство людей сегодня используют его. Это абсолютно не имеет отношения к алгоритму. Частный случай для двух базовых оснований может иметь смысл по техническим причинам (поскольку компьютеры используют базу 2 внутри).
  • Зачем делать двойное преобразование вместо простого чтения из базы x и записи на базу y?
  • 0
    Я сделал двойное преобразование, потому что алгоритм, который я использовал для изменения базы, работает только с базы 10 на х и с х на 10. Но я постараюсь сделать это прямо. У меня нет "оправдания" для других пунктов :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню