때에 따라 다르지. 곱셈의 논리적 연산 또는 실제로 하드웨어에서 어떻게 수행되는지에 대해 이야기하고 있습니까?
예를 들어, 16 진 (또는 8 진 또는 다른 2 진 승수) 문자열을 "곱하지 않고"정수로 변환 할 수 있습니다. 문자별로 이동하고 계속해서 ( |
) 및 비트 이동 ( <<
)을 유지할 수 있습니다 . 이것은 *
연산자 사용을 피합니다 .
십진 문자열로 동일한 작업을 수행하는 것이 까다 롭지 만 여전히 간단한 추가가 있습니다. 루프를 사용하여 동일한 작업을 수행 할 수 있습니다. 매우 간단합니다. 또는 당신은 당신의 자신의 "곱셈표"를 만들 수 있습니다-희망적으로 당신은 학교에서 숫자를 곱하는 방법을 배웠습니다; 컴퓨터에서도 같은 일을 할 수 있습니다. 물론 이진이 아닌 10 진수 컴퓨터를 사용하는 경우 이전 16 진 문자열과 마찬가지로 "비트 시프트"를 수행 할 수 있습니다. 심지어 이진 컴퓨터와 함께, 당신은 bitshifts의 시리즈를 사용할 수 있습니다 - (a << 1) + (a << 3)
와 동일합니다 a * 2 + a * 8 == a * 10
. 음수에주의하십시오. 이것을 흥미롭게 만들기위한 많은 트릭을 알아낼 수 있습니다.
물론, 둘 다 변장에있어서의 곱셈 일뿐입니다. 위치 숫자 시스템은 본질적으로 곱하기 때문 입니다. 이것이 특정 숫자 표현이 작동하는 방식입니다. 이 사실을 숨기는 단순화를 가질 수 있습니다 (예 : 이진수에만 필요 0
및 1
). 곱하기 대신 간단한 조건을 가질 수 있습니다. 물론 두 가지 가능한 입력과 두 개의 가능한 입력만으로도 실제로 곱셈입니다 출력),하지만 항상 숨어 있습니다. 작업을 수행하는 하드웨어가 더 단순하거나 빠를 수있는 경우에도 <<
와 동일 * 2
합니다.
곱셈을 완전히 없애려면 위치 시스템을 사용하지 않아야합니다. 예를 들어, 로마 숫자는 첨가제 (- 네 것 실제 로마 숫자는 오늘날 우리가 가지고있는 소형화 규칙을 사용하지 않은 것을 참고있다 IIII
, 없다 IV
, 그것은 십사은 같은 어떤 형태로 작성 될 수있는 XIIII
, IIIIX
, IIXII
, VVIIII
등). 이러한 문자열을 정수로 변환하는 것은 매우 쉽습니다. 문자별로 이동하고 계속 추가하십시오. 문자가 X
인 경우 10을 추가하십시오. 인 경우 V
5를 추가하십시오. 만약I
하나를 추가하십시오. 로마 숫자가 왜 그렇게 오랫동안 인기를 얻었는지 알 수 있기를 바랍니다. 위치 숫자 시스템은 곱셈과 나눗셈을 많이해야 할 때 훌륭합니다. 덧셈과 뺄셈을 주로 다루는 경우 로마 숫자는 훌륭하게 작동하며 학교 교육이 훨씬 적습니다 (그리고 주판은 위치 계산기보다 훨씬 쉽게 만들고 사용할 수 있습니다!).
이와 같은 과제를 통해 면접관이 실제로 기대하는 것에 대한 많은 히트와 누락이 있습니다. 아마도 그들은 단지 당신의 사고 과정을보고 싶어 할 것입니다. 당신은 기술을 포용 합니까 ( 실제로 곱셈 <<
은 아님 )? 당신은 숫자 이론과 컴퓨터 과학을 알고 있습니까? 코드로 뛰어 들거나 설명을 요청합니까? 재미난 도전이라고 생각하십니까, 아니면 직업과 관련이없는 말도 안되는 지루한 인터뷰 질문으로 보십니까? 면접관이 찾고있는 답변을 알려주는 것은 불가능합니다.
그러나 나는 적어도 당신에게 가능한 대답을 엿볼 수 있기를 바랍니다 :)