algorithm - 将非十进制数转换为另一个非十进制数

标签 algorithm base-conversion

并不是说这需要很多工作,但我知道将一个非十进制转换为另一个非十进制的唯一方法是先将数字转换为十进制,然后采取第二步将其转换为新的基数。例如,要将 456(以 7 为基数)转换为 567(以 8 为基数),我会计算 456 的十进制值,然后将该值转换为以 8 为基数...

有没有更好的方法直接从 7 到 8?或与此相关的任何其他基地的任何基地?

这是我所拥有的:


   //source_lang and target_lang are just the numeric symbols, they would be "0123456789" if they were decimal, and "0123456789abcdef" if hex.
   private string translate(string num, string source_lang, string target_lang)
    {
        int b10 = 0;
        string rv = "";
        for (int i=num.Length-1; i>=0; i--){
            b10 += source_lang.IndexOf( num[i] ) * ((int)Math.Pow(source_lang.Length, num.Length -1 - i));
        }
        while (b10 > 0) {
            rv = target_lang[b10 % target_lang.Length] + rv;
            b10 /= target_lang.Length;
        }
        return rv;
    }

最佳答案

您并没有真正将其转换为以 10 为基数。您正在将其转换为数字数据类型而不是字符串表示形式。如果有的话,你正在将它转换成二进制 :) 区分“整数”(本质上没有基数)和“整数的文本表示”(有基数)是值得的。

IMO,这似乎是一个明智的做法。但是,您的转换例程肯定不是特别有效。我会将您的代码分成 ParseFormat 方法,然后 Convert 方法可以是这样的:

public static string Convert(string text, int sourceBase, int targetBase)
{
    int number = Parse(text, sourceBase);
    return Format(number, targetBase);
}

(当然,您可以根据需要使用 string 来表示不同的基数。如果您确实需要这种灵 active ,我很想创建一个新类来表示一个“数字表示”。该类可能应该是包含 ParseFormatConvert 的类。)

关于algorithm - 将非十进制数转换为另一个非十进制数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1360871/

相关文章:

php - base_convert 和负数

algorithm - 将基数 10 转换为基数 X 的算法背后的逻辑

algorithm - 仅网络贝叶斯分类器的伪代码

algorithm - 子集概率(同余变化)

c++ - 如何将字符串转换为不同基数的整数?

将 10 进制转换为 6 进制

Java 的内置库(或第 3 方代码)进行基础转换

java - 如何调试我的冒泡排序代码?

c# - 为两个订单 ID 的排列创建唯一哈希码

C++递归线性搜索失败