원금이 2배로 불어나는 기간 계산.c
밍고스사랑해(mingosudaisuki)
2016-05-16 17:24
추천 0
로그를 사용
#include <stdio.h>
#include <math.h>
int main()
{
double r;
scanf("%lf", &r);
printf("%.0f\n", ceil(log(2) / log(1 + r)));
return 0;
}
반복문을 사용 (표준 수학 라이브러리의 사용법을 아직 배우지 않았을 경우)
#include <stdio.h>
int main()
{
double r, x = 1;
int year = 1;
scanf("%lf", &r);
while((x *= 1 + r) < 2)
{
++year;
}
printf("%d\n", year);
return 0;
}
참고로, (int)를 써서 정수로 변환해 %d로 출력하는 대신 %.0f를 쓰는 것은 '책임 떠넘기기'라는 중요한 기술입니다.
책임떠넘기기..ㄷㄷㄷㄷ
특정한 환경에서 어떤 자연수 n에 대해 n-ε를 버림했을 때 n-1이 아니라 n이 되어야 하는 가장 큰 양의 실수 ε가 어느 정도 큰지에 대한 지식을 가장 잘 알고 있는 쪽(party)은 printf일 가능성이 가장 높기 때문입니다. 보통은 이런 문제를 신경쓰지 않아도 되긴 합니다.
ε_ε
printf가 이러한 처리에 대한 '적절한' 지식을 가지고 있을 것이라는 기대가 꽤나 합리적이라는 것은 printf의 %g 서식 지정자나 C++ iostream 라이브러리로 출력을 할 때 '적절한' 자릿수 뒤에서 잘라주는 것을 참고하면 쉽게 납득할 수 있습니다.
fenv.h
제가보는 교제엔 %.0f 언급이 없는데 %.0f는 모든경우 사용가능한건가요?