Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

연 1% 복리로 X루피를 모으는 데 필요한 연수를 계산하는 C++ 프로그램

문제 개요

숫자 X가 주어졌을 때, 은행에 예치한 100루피가 연 1%의 복리(매년 이자가 원금에 다시 합산됨)로 불어난다고 가정해 봅시다. 이때 총액이 X루피에 도달하기까지 몇 년이 걸리는지 구하는 것이 목표입니다. 단, 금액은 정수 단위로만 계산합니다.

예를 들어 입력값이 X = 520이라면, 출력 결과는 213이 됩니다.

해결 접근 방법

이 문제는 시뮬레이션 방식으로 간단히 해결할 수 있습니다. 잔액이 목표 금액 n에 도달할 때까지 매년 이자를 계산하여 원금에 더하는 과정을 반복하면서, 반복 횟수 즉, 경과 연수를 세면 됩니다.

구체적인 알고리즘은 다음과 같습니다.

sum := 0          // 경과 연수
balance := 100    // 초기 잔액
while balance < n, do:
    interest := balance / 100   // 연 1% 이자 계산
    sum := sum + 1              // 1년 경과
    balance := balance + interest // 이자를 잔액에 합산
return sum

C++ 구현 예제

아래 코드는 위 알고리즘을 C++로 구현한 것입니다.

#include <bits/stdc++.h>
using namespace std;

int solve(int n){
    int sum = 0;
    int balance = 100;
    while (balance < n){
        int interest = balance / 100;
        sum = sum + 1;
        balance = balance + interest;
    }
    return sum;
}
int main(){
    int X = 520;
    cout << solve(X) << endl;
}

입력

520

출력

213

코드 설명

solve() 함수는 초기 잔액 100루피에서 시작하여, 잔액이 목표 금액 n 미만인 동안 루프를 반복합니다. 매 반복마다 현재 잔액의 1%에 해당하는 이자(balance / 100)를 계산하고, 이를 잔액에 더한 후 연수를 1씩 증가시킵니다.

정수 나눗셈을 사용하기 때문에 이자는 항상 내림 처리되며, 문제 조건인 '정수 단위 계산'을 자연스럽게 만족합니다. 520루피의 경우 약 213년이 걸린다는 결과가 나오는데, 이는 연 1%라는 낮은 이자율 때문에 자금이 두 배로 불리는 데만 해도 대략 70년가량 소요되기 때문입니다. 이는 복리 성장률을 추정하는 '72의 법칙(72 ÷ 이자율 ≈ 배상 기간)'과도 일치하는 결과입니다.