タイトルのとおり。
#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 すげー!