큰 밑수 B를 저장하는 가장 좋은 방법은 오른쪽 시프트 및 최하위 비트 확인과 같은 작업을 효율적으로 수행 할 수 있도록하는 것입니다.큰베이스 B 번호를 저장하는 가장 좋은 방법은 무엇입니까?
사실, 난 내가 생각하는 나는 base N number system
을 고려하는 경우, 다음 N^N
그것에 1 followed by N zero
에 해당 될 것입니다
Given two numbers N and K such that 0<=N<=1000 and 0<=K<=1000^1000. I need
to check that whether N^N = K or not. For example:
if N=2 and K=4 , 2^2 = 4 so return true;
if N=3 and K=26 , 3^3 != 26 so return false
말한다 인터뷰 질문 건너 온있다. 예를 들어 - N = 2, 2^2 = 100 (2 진수), N = 3, 3^3 = 1000 (3 진수). 그러면 쉽게 K = N^N
인지 여부를 알 수있는 함수를 작성할 수 있습니다.
1) An unsigned long int is not sufficient to store large numbers of range 0
to 1000^1000.
2) The modulus and the division operations makes it every less efficient.
, 나는 몇 가지 방법을 찾고 있어요 내가 오른쪽 시프트를 수행 할 수 있도록 큰 기본 N 번호를 나타내는 :
int check(unsigned long int N, unsigned long int K)
{
unsigned long int i;
for (i=0; i<N; i++)
{
if (K%N != 0) //checking whether LSB is 0 or not in base N number system
return 0;
K = K/N; //right shift K by one.
}
return (K==1);
}
이제이 기능 두 가지 문제가있다 최하위 비트 연산들을 효율적으로 체크하는 단계를 포함한다. 누구도 전에 그런 것을 보았습니까? 아니면 누구든지이 문제를 효율적으로 해결할 다른 방법을 알고 있습니까?
원래 주어진 숫자는 어떤 형식입니까? 일반적으로 'N'에'K '를 표시하고 싶다면, 당신은 나누기를해야합니다. 그러면 나누기와 검사보다 당신을 사지 않을 것입니다. –
대니얼 (Daniel)의 말 : 당신이 그러한 데이터 구조를 가지고있다하더라도, 데이터 구조에 그것을 연결하기 위해'K'를 기본'N' 표현으로 변환하는 것은 여러분이 직면하고있는 거의 모든 문제입니다. 그것은 모든 분열과 계수 (modulus)와 같습니다. –
@ 대니얼 피셔 : 사실,이 질문은 인터넷 http://www.careercup.com/question?id=13880754에 나와 있습니다. 여기에는 범위를 제외한 원래 번호에 관한 정보는 제공되지 않습니다. 그렇다면 문제를 효율적으로 해결하는 데 도움이되는 편리함으로 생각할 수 있습니다. –