タイトルのとおり。
#include #include int main(int argc, char *argv[]) { unsigned long long int a, b, tmp; int n, i; n = atoi(argv[1]); a = 1; b = 1; for (i = 1; i <= n; i++) { printf("%lld\n", a); tmp = a + b; a = b; b = tmp; } return 0; }
実行結果:
takatoh@nightschool $ ./fib 100 1 1 2 3 5 8 13 21 34 (中略) 4660046610375530309 7540113804746346429 12200160415121876738 1293530146158671551 13493690561280548289 14787220707439219840 9834167195010216513 6174643828739884737 16008811023750101250 3736710778780434371
最後のほうで桁が少なくなったり、明らかにおかしな数値になってしまう。
試しに Ruby でやってみた。
def fib(n) a = b = 1 1.upto(n) do |i| puts a a, b = b, a + b end end fib(ARGV[0].to_i)
takatoh@nightschool $ ruby fib.rb 100 1 1 2 3 5 8 13 21 34 (中略) 4660046610375530309 7540113804746346429 12200160415121876738 19740274219868223167 31940434634990099905 51680708854858323072 83621143489848422977 135301852344706746049 218922995834555169026 354224848179261915075
ちゃんと計算できてる! Ruby すげー!