반응형
Honer’s method
호너의 법칙은 다항식을 푸는데 있어 계산량을 줄여준다.
프로그래밍에서 n진법을 10진법으로 바꿀 때 유용하게 사용할 수 있다.
예를들어,
1101 이라는 2진수가 있다.
우리가 10진수로 바꿀 때, 아래와 같이 8+4+1 = 13 으로 변환을 했다.
이를 수식으로 표현해보면 다음과 같다.
로 볼 수 있다.
여기에 x = 2를 대입(2진법 이기에)하여 계산해 보면, 우리가 위에서 계산한 방법과 똑같이
나오는 것을 확인 할 수 있다.
여기서,
를 다음과 같이 생각할 수 있다.
일반화하면 다음과 같다.
이렇게 하면 좋은 점은, 계산량을 최소화할 수 있고,
첫 번째 오는 숫자가 몇 째 자리의 수 인지 계산하지 않고 순차적으로 계산할 수 있기때문이다.
이는 programming 할 때 부담을 줄여준다.
아래는 위 내용을 코드로 구현한 것이다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | #include <stdio.h> char input[100]; int x; long long honer(int x) { long long sum = 0; for (int i = 0; input[i] != '\0'; i++) { if (input[i] >= 'A' && input[i] <= 'Z') sum = sum * x + (input[i] - 'A' + 10); else sum = sum * x + (input[i] - '0'); } return sum; } int main() { scanf("%s", input); //string으로 변환하고자 하는 숫자를 입력받는다 scanf("%d", &x); //몇 진법 숫자인지 입력받는다 printf("result : %lld \n", honer(x)); return 0; } | cs |
반응형
'Programming > Algorithm' 카테고리의 다른 글
링크드리스트의 모든 것 linked list (0) | 2021.07.02 |
---|---|
머지소트(merge sort) (0) | 2021.06.16 |
배열이용하여 Hash 사용하기(feat. 코딩테스트) (0) | 2021.06.14 |
동적할당 대신 배열을 사용해 시간 줄이기(feat. 코딩테스트) (1) | 2021.06.14 |
그레이 코드(gray code) 와 이진 코드(binary code) 변환 (0) | 2020.10.11 |