이 튜토리얼에서는 처음 N개의 Iccanobif 수를 구하는 프로그램을 작성하는 방법을 살펴보겠습니다.
Iccanobif 수는 피보나치 수와 매우 유사한 수열입니다. 다만 한 가지 중요한 차이점이 있는데, 바로 이전 두 수를 더할 때 각 수의 자릿수를 먼저 뒤집은 후 더한다는 점입니다.
예를 들어 이전 두 항이 13과 39라고 가정해 보겠습니다. 일반적인 피보나치 수열이라면 13 + 39 = 52가 되지만, Iccanobif 수열에서는 13을 뒤집어 31로, 39를 뒤집어 93으로 만든 뒤 더하므로 31 + 93 = 124가 됩니다.
접근 방법
- 첫 번째 항을 0, 두 번째 항을 1로 초기화합니다.
- 주어진 수의 자릿수를 뒤집는 함수를 작성합니다.
- 세 번째 항부터 N번째 항까지 반복하면서, 이전 두 항의 자릿수를 각각 뒤집아 더한 값을 출력하고 두 변수를 갱신해 나갑니다.
예제 코드
#include <bits/stdc++.h>
using namespace std;
// 숫자의 자릿수를 뒤집는 함수
int reverse_digits(int num){
int rev_num = 0;
while (num > 0) {
rev_num = rev_num * 10 + num % 10;
num = num / 10;
}
return rev_num;
}
// 처음 N개의 Iccanobif 수를 출력하는 함수
void icanobifNumbers(int N){
int first = 0, second = 1;
if (N == 1)
cout << first;
else if (N == 2)
cout << first << " " << second;
else {
cout << first << " " << second << " ";
for (int i = 3; i <= N; i++) {
int x = reverse_digits(first);
int y = reverse_digits(second);
cout << x + y << " ";
int temp = second;
second = x + y;
first = temp;
}
}
}
int main(){
int N = 12;
icanobifNumbers(N);
return 0;
}
출력 결과
0 1 1 2 3 5 8 13 39 124 514 836
위 코드에서 reverse_digits() 함수는 주어진 수의 자릿수를 뒤집는 역할을 담당하며, icanobifNumbers() 함수는 이를 활용하여 처음 N개의 Iccanobif 수를 차례대로 계산하고 출력합니다. 시간 복잡도는 O(N × d)로, 여기서 d는 수의 자릿수를 의미합니다.