https://www.acmicpc.net/problem/1788
1788번: 피보나치 수의 확장
첫째 줄에 F(n)이 양수이면 1, 0이면 0, 음수이면 -1을 출력한다. 둘째 줄에는 F(n)의 절댓값을 출력한다. 이 수가 충분히 커질 수 있으므로, 절댓값을 1,000,000,000으로 나눈 나머지를 출력한다.
www.acmicpc.net
피보나치 수 F(n)에서 n이 음수의 경우에도 값을 구하는 문제이다.
-1부터 F(n)을 구하다 보면 값의 절대값이 대칭이 되는 것을 볼 수 있다.
F(n)이 음수인지, 양수인지, 0인지를 구하고 F(|n|)을 구하면 된다.
#include <stdio.h>
unsigned long long F[1000001] = { 0 ,1 };
int main()
{
int n;
scanf("%d", &n);
if (n < 0)
{
printf("%d\n", n % 2 == 0? -1: 1);
n *= -1;
}
else if (n > 0) printf("1\n");
else printf("0\n");
for (int i = 2; i <= n; i++)
F[i] = F[i - 1] % 1000000000 + F[i - 2] % 1000000000;
printf("%llu", F[n] % 1000000000);
}'Problem Solving' 카테고리의 다른 글
| [BOJ 9095] 1, 2, 3 더하기 (0) | 2020.01.02 |
|---|---|
| [BOJ 2163] 초콜릿 자르기 (0) | 2020.01.02 |
| [BOJ 2407] 조합 (0) | 2020.01.01 |
| [BOJ 3054] 피터팬 프레임 (0) | 2019.12.30 |
| [BOJ 2960] 에라토스테네스의 체 (0) | 2019.12.30 |