可能重复:
Efficient algorithm for conversion between numeral system
给定一个整数,编写一个程序,将给定的数字转换为数字(基数为10)。提示 - 给定的数字可以在任何基础上,但基数是未知的。
答案 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)
结果= 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)");
希望这会有所帮助。