이 섹션에서 우리는 한 가지 흥미로운 문제를 볼 것입니다. 하나의 숫자가 주어진다고 가정합니다. 이 숫자를 1로 늘려야 합니다. 이것은 매우 간단한 작업입니다. 그러나 여기서는 숫자를 배열로 배치합니다. 해당 숫자의 각 숫자는 배열의 요소로 배치됩니다. 번호가 512이면 {5, 1, 2}로 저장됩니다. 또한 재귀 접근 방식을 사용하여 숫자를 늘려야 합니다. 명확한 아이디어를 얻기 위해 알고리즘을 살펴보겠습니다.
알고리즘
증분(arr, n, 인덱스) -
Initially the default value of index is 0 begin if index < n, then if arr[index] < 9, then arr[index] := arr[index] + 1 else arr[index] := 0 increment(arr, n, index + 1) end if if index = n, then arr[n] := 1 n := n + 1 end if end
예시
#include <iostream>
#include <cmath>
#define MAX 20
using namespace std;
void increment(int num_arr[], int &n, int index = 0){
if(index < n){
if(num_arr[index] < 9){ //if digit is less than 9, add 1
num_arr[index]++;
}else{ //otherwise increase number recursively
num_arr[index] = 0;
increment(num_arr, n, index+1);
}
}
if(index == n){
num_arr[n] = 1; //add extra carry
n++; //increase n
}
}
void dispNumber(int num_arr[], int n){
for(int i = n-1; i>= 0; i--){
cout << num_arr[i];
}
cout << endl;
}
int numToArr(int num_arr[], int number){
int i = 0;
int n = log10(number) + 1;
for(int i = i; i< n; i++){
num_arr[i] = number % 10;
number /= 10;
}
return n;
}
main() {
int number = 1782698599;
int num_arr[MAX];
int n = numToArr(num_arr, number);
cout << "Initial Number: "; dispNumber(num_arr, n);
increment(num_arr, n);
cout << "Final Number: "; dispNumber(num_arr, n);
} 출력
Initial Number: 1782698599 Final Number: 1782698600