가능한 중복 :
정수 감안할 때
Efficient algorithm for conversion between numeral system알고리즘은 10 수에 해당하는베이스에 알 수없는베이스에 숫자를 변환하는
하는에 지정된 수를 변환하는 프로그램을 작성 번호 (10 진수). 힌트 - 주어진 숫자는 어떤 기초에도있을 수 있지만 기지는 알 수 없습니다.
가능한 중복 :
정수 감안할 때
Efficient algorithm for conversion between numeral system알고리즘은 10 수에 해당하는베이스에 알 수없는베이스에 숫자를 변환하는
하는에 지정된 수를 변환하는 프로그램을 작성 번호 (10 진수). 힌트 - 주어진 숫자는 어떤 기초에도있을 수 있지만 기지는 알 수 없습니다.
그럴 수 없습니다. 근원 기지를 모른 채 모호하다. 베이스에 10
n
n
10
; 무한한 가능성이 있습니다
일단 기지를 얻으면 쉽게 할 수 있습니다.
가장 높은 자릿수를 찾아 기준의 하한을 얻을 수 있습니다. 숫자 175234에서와 같이베이스는 적어도 8이어야합니다. 그러나 당신은 상한선을 찾을 수 없습니다 : 숫자는 8에서 무한대까지의 어떤 기준이 될 수 있습니다.
대신 첫 번째 기준이 예를 들어, 주어진 숫자를 인쇄 할 수 있습니다. 8, 9 또는 10 일 수 있습니다. 그러면 사용자는 자신이 생각하는 것을 결정할 수 있습니다.
'알 수 없음'으로 가정합니다. 알고리즘이 어떤 기반을 처리 할 수 있어야한다는 뜻입니까? 그렇지 않으면 그냥 불가능합니다.
그래서 기본적으로 convert (number, base) = base10Number를 요구하고 있습니까?
count = 0
total = 0
for each digit in number, from least significant to most significant
total = total + digit * base^count
count = count + 1
변환 (355,8)
결과 = 237
문제 문은 소정 수의 염기가 불명 한 것을 말한다. 따라서 진행하려면 번호에 대한 기반을 추측해야합니다. 숫자에서 최대 값을 갖는 숫자는 알 수없는 기본 값으로 계산 될 수있는 최대 값을 의미한다고 가정하는 것이 실제적으로 안전합니다. 이 도움 6
if(!(((ascii >= '0') && (ascii <= '9')) || ((ascii >= 'A') && (ascii <= 'Z')))) {
printf("Illegal number, can have only digits (0-9) and letters (A-Z)");
호프 또는 염기 - 254로 언급하는 경우, 예를 들어이 값은, 수 시스템 숫자 0, 1, 2, 3, 4, 5로 구성되어 있다고 가정 할 수있다.
이것은 잘못된 질문입니다. 그 숫자가 8 진수 시스템, 16 진수 시스템 일 수 있습니다. 결정할 수 없습니다. 우리는 입력 숫자를 알아야합니다.우리는 같은 방법을 쓸 수 이
공공 INT convertToBase (INT inNumber, INT inBase, INT outBase) {
// ㅋ ㅋ ㅋ ㅋ
반환 convertedNumber; }
공용 클래스 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;
}
}
당신은 단지 기본 변환 Wallar의 알고리즘을 사용할 수 있습니다. 알고리즘은 n 개의 기본 c를 n 개의 기본 b로 변경합니다. n은 숫자를 구성하는 숫자 목록입니다. 각 자릿수에는 두 개 이상의 자릿수가 포함될 수 있습니다. 아래는 파이썬에서 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)]
태그가 지정된 숙제입니까? –
어떻게 그게 가능합니까? 어떤 기초가 "4"입니까? 그것은베이스 5,베이스 12,베이스 123 일 수 있습니다 - 당신은 이제 알고있는 방법이 있습니다! –
어쩌면 그것은 읽어야한다 : 기초 10에있는 수를 다른 어떤 기초에있는 수로 개조 하는가? –