반응형
제곱근을 구하는 알고리즘을 작성해 보도록 하겠습니다.
제곱근이란 제곱의 반대라고 생각하면 편할 것 같습니다.
예를 들어, 4의 제곱근은 무엇일까요? 2를 2번 곱하면 4가 되므로 2가 됩니다.
그렇다면 n의 제곱근은 어떠한 수 X를 2번 곱했을 때 n이 된다면 X는 n의 제곱근이 됩니다.
아래의 함수에서 n을 인자 nb로 받습니다.
int OdOp_sqrt(int nb)
{
long long i;
if (nb <= 0)
return (0);
else if (nb == 1)
return (1);
i = 1;
while (i * i <= (long long)nb)
{
if (i * i == nb)
return (i);
i++;
}
return (0);
}
i를 long long으로 둔 이유는 i를 거듭제곱했을 때에 overflow가 일어날 수도 있기 때문입니다.
저희는 허수를 다루지 않을 것이기 때문에 nb가 음수거나 0이라면 0을 리턴했습니다.
nb가 1이면 무조건 1의 제곱근 1이겠죠.
i의 제곱이 nb보다 작거나 같을 때동안 while문을 돕니다.
이때 i의 제곱이 nb와 같다면 i를 리턴해 줍니다.
i의 제곱이 nb보다 커졌다면 nb의 제곱근이 정수가 아니라는 뜻이기 때문에 0을 리턴합니다.
반응형
'Algorithm > Algorithm' 카테고리의 다른 글
C언어, 다음 소수 찾기 (0) | 2023.12.14 |
---|---|
C언어, 소수 판별하기 (0) | 2023.12.13 |
C언어, 팩토리얼(factorial) (0) | 2023.12.11 |
C언어, 거듭 제곱 (0) | 2023.12.10 |
C언어, 피보나치 수열 (0) | 2023.12.09 |