구구단 프로그램을 작성하기 위해서는 아래의 기능을 구현해야 한다.


세부 구현은 다음이 필요하다.
반복문
개행 문자(\n) 처리
read 시스템 콜을 사용해 이용자로부터 문자열을 입력 받는 경우, 입력의 끝을 나타내는 개행 문자(\n)가 문자열의 마지막에 함께 저장된다.문자열의 정수 변환
입력 받은 숫자 형태의 문자열을 정수 데이터로 변환하기 위해, C의 atoi()와 유사한 기능을 직접 구현해야 한다. 문자 ‘9’를 정수 9로 변환하는 과정을 생각해보자. 문자 ‘9’는 아스키 코드 57에 해당한다.
이때 문자 ‘0’은 아스키 코드 48에 대응하므로, 문자 ‘9’의 아스키 코드에서 문자 ‘0’의 아스키 코드를 빼면 정수 9를 얻을 수 있다. 따라서 모든 숫자 문자에 대해 해당 문자의 아스키 코드에서 ‘0’의 아스키 코드인 48을 빼면 대응하는 정수 값을 구할 수 있다.
문자열 ‘9876’을 정수 9876으로 변환하는 과정은, 우선 각 자릿수의 문자를 숫자로 변환한 후, 10의 거듭제곱을 곱해 정수로 변환할 수 있다. 이를 설명하기 위해 정수 9876을 십진법의 전개식으로 나타내면 아래와 같다.
$$ 9876 = 9 * 10^3 + 8 * 10^2 + 7 * 10^1 + 6 * 10^0 $$
그러나 연산의 편의를 위해서는 위의 계산식을 사용하는 것보다 호너의 법칙을 사용하는 것이 더 효율적이다. 따라서 각각의 문자를 정수 9, 8, 7, 6으로 변환한 후, 호너의 법칙을 이용해 문자열을 정수로 변환한다. 호너의 법칙으로 9876을 나타낸 식은 아래와 같다.
$$ 9876 = ((9 * 10 + 8) * 10 + 7) * 10 + 6 $$
**호너의 법칙
호너의 법칙(Horner’s method)** 또는 **호너의 방법(Horner’s rule)**은 다항식을 표현하는 방법 중 하나로, 다항식을 중첩된 형태로 바꿔 한 번의 순회로 계산할 수 있게 만드는 기법이다. 이 방법을 이용하면 지수 연산을 명시적으로 수행하지 않고도, 계수를 차례대로 곱셈/덧셈해 나가면서 최종 값을 얻을 수 있어 메모리 효율성이 좋다. 아래는 다항식 P(x)를 호너의 법칙으로 나타내는 예시이다.
$$ P(x) = a_0 + a_1x + a_2x^2 + ... + a_nx^n = a_0 + x(a_1 + x(a_2 + x(... + x(a_n-1 + xa_n)...))) $$
printf() 와 포맷 스트링을 사용한다. 이때, printf()는 구현이 번거롭기 때문에 extern 명령어를 통해 외부에 정의된 함수를 사용하도록 한다.프로그램의 기능을 구현하기 전, 입출력에 사용될 문자열 데이터와 상수를 정의해야 한다.
데이터 세그먼트(Data Segment)에는 값이 정해진, 즉 초기화가 된 전역 변수와 상수들이 위치한다. 따라서 .data 섹션에 프로그램에 사용될 상수 문자열들과 전역 변수 및 상수를 정의한다. 일반적으로 상수 문자열은 .rodata 섹션에 정의된다.