算法将未知基数中的数字转换为等效的基数10

时间:2010-05-28 06:28:13

标签: algorithm base-conversion

  

可能重复:
  Efficient algorithm for conversion between numeral system

给定一个整数,编写一个程序,将给定的数字转换为数字(基数为10)。提示 - 给定的数字可以在任何基础上,但基数是未知的。

7 个答案:

答案 0 :(得分:11)

无法做到;在不知道源基础的情况下,数字是不明确的。基数10中的n转换为基数n中的10;有无限的可能性

答案 1 :(得分:8)

我假设'未知'你的意思是算法需要能够处理任何基数?否则,这根本不可能。

所以你基本上要求函数转换(数字,基数)= base10Number?

count = 0
total = 0
for each digit in number, from least significant to most significant
  total = total + digit * base^count
  count = count + 1

e.g。 转换(355,8)

  • 第一循环:total = 0 + 5 * 8 ^ 0 = 5
  • 第二循环:总计= 5 + 5 * 8 ^ 1 = 45
  • 第三循环:总= 45 + 3 * 8 ^ 2 = 237

结果= 237

答案 2 :(得分:2)

您可以使用Wallar算法转换基数。算法将n base c改为n base b。 n是组成数字的数字列表。每个数字可能包含多个数字。下面是Python中Wallar算法的实现。

from math import *
def baseExpansion(n,c,b):
    j = 0
    base10 = sum([pow(c,len(n)-k-1)*n[k] for k in range(0,len(n))])
    while floor(base10/pow(b,j)) != 0: j = j+1
    return [floor(base10/pow(b,j-p)) % b for p in range(1,j+1)]

答案 3 :(得分:1)

一旦你有了基础,这很容易做到。

您可以通过查找最高位来获得基数的下限。与数字175234一样,基数必须至少为8.但是你永远找不到上限:数字可以是从8到无穷大的任何基数。

相反,你可以打印出它的数字,因为第一个基数是例如8,9或10.然后用户可以决定他/她的想法。

答案 4 :(得分:0)

这是错误的问题,因为考虑到数字7可能是八进制,十六进制。这是不可能决定的。我们必须知道输入数字基数。 我们可以写这样的方法

public int convertToBase(int inNumber,int inBase,int outBase){

// blah blah

return convertedNumber; }

答案 5 :(得分:0)

public class TestNumberBase {

/**
 * @param args
 */
public static void main(String[] args) {
    // TODO Auto-generated method stub

    System.out.println(converNumberTObase(100000, 2, 16));

}

public static int converNumberTObase(int inNum, int inBase, int outBase) {

    return convertDecimalToOtherBase(convertDecimalEquivalent(inNum, inBase), outBase)  ;   

}

public static int convertDecimalEquivalent(int number, int inBase) {

    int outNumber = 0;
    int _base =inBase;


    while (number > 0) {
        int digit = number % 10;
        number = number / 10;

        outNumber = outNumber + (inBase / _base) * digit;
        inBase = inBase*_base;

    }

    return outNumber;

}
public static int convertDecimalToOtherBase(int number, int outBase) {

    int outNumber = 0;
    int _base = 10, base =10;


    while (number > 0) {
        int digit = number % outBase;
        number = number / outBase;

        outNumber = outNumber + (base / _base) * digit;
        base = base*_base;

    }

    return outNumber;

}

}

答案 6 :(得分:-1)

问题陈述指出给定数字的基数是未知的。因此,为了继续,必须为数字假设一个基数。假设数字中具有最大值的数字表示可以在未知基数中计算的最大值,这实际上是安全的。这个数字,例如,如果说明为254,则可以假设数字系统由数字0,1,2,3,4,5或基数6组成。

if(!(((ascii >= '0') && (ascii <= '9')) || ((ascii >= 'A') && (ascii <= 'Z')))) {
   printf("Illegal number, can have only digits (0-9) and letters (A-Z)");

希望这会有所帮助。