개발관련/other

함수 설계 f (f (n)) == -n

Rateye 2021. 10. 8. 10:39
728x90
반응형
질문 : 함수 설계 f (f (n)) == -n

지난 인터뷰에서 내가받은 질문 :

다음과 같이 f 설계하십시오.

f(f(n)) == -n

여기서 n 은 32 비트 부호있는 정수입니다 . 복소수 산술을 사용할 수 없습니다.

전체 숫자 범위에 대해 이러한 함수를 설계 할 수없는 경우 가능한 가장 큰 범위로 설계하십시오.

어떤 아이디어?

답변

어때 :

f(n) = sign(n) - (-1)n * n

Python에서 :

def f(n): 
    if n == 0: return 0
    if n >= 0:
        if n % 2 == 1: 
            return n + 1
        else: 
            return -1 * (n - 1)
    else:
        if n % 2 == 1:
            return n - 1
        else:
            return -1 * (n + 1)

Python은 정수를 임의 길이 long으로 자동 승격합니다. 다른 언어에서는 가장 큰 양의 정수가 오버플로되므로 해당 정수를 제외한 모든 정수에 대해 작동합니다.


진짜 번호를 작동하게하려면 (-1) N에 n 개의 교체 할 필요가 { ceiling(n) if n>0; floor(n) if n<0 } .

C #에서 (오버플로 상황을 제외하고 모든 double에 대해 작동 함) :

static double F(double n)
{
    if (n == 0) return 0;

    if (n < 0)
        return ((long)Math.Ceiling(n) % 2 == 0) ? (n + 1) : (-1 * (n - 1));
    else
        return ((long)Math.Floor(n) % 2 == 0) ? (n - 1) : (-1 * (n + 1));
}
출처 : https://stackoverflow.com/questions/731832/designing-function-ffn-n
728x90
반응형