アホによる回答

http://d.hatena.ne.jp/ita/20071203/p1

#include <stdio.h>
#include <string.h>
#define KETA 5000

int chval(char ch)
{
	if(ch==0) return -1;
	return ch-'0';
}

void sum_su(char *buf, char *s1, char *s2)
{
	int i, next = 0, v1, v2, val;
	char *s = buf;
	for(i=0;i<KETA;i++)
	{
		v1 = chval(*s1);
		v2 = chval(*s2);
		if (v1==-1 && v2==-1 && next==0) break;
		if (v1==-1)v1 = 0;
		if (v2==-1)v2 = 0;
		val = (v1) + (v2) + next;
		next = val / 10;
		val = val % 10;
		*s = val+'0';
		s1++;
		s2++;
		s++;
	}
	*s = 0;
}

void revprint(char *s)
{
	int i, len = strlen(s);
	for(i=len-1;i>=0;i--)
	{
		putchar(*(s+i));
	}
}
void main()
{
	int i;
	char sua[KETA], sub[KETA], suv[KETA], suv2[KETA];
	memset(sua,0,sizeof(sua));
	memset(sub,0,sizeof(sub));
	memset(suv,0,sizeof(suv));
	memset(suv2,0,sizeof(suv2));
	sub[0] = '1';
	for(i=0;i<1000;i++)
	{
		revprint(sub);
		printf("\n");
		strcpy(suv, sub);
		sum_su(suv2, sua, sub);
		strcpy(sub, suv2);
		strcpy(sua, suv);
	}
#if 0
	int a = 0, b = 1;
	for(i=0;i<40;i++)
	{
		int v;
		printf("%d ", b);
		v = b;
		b = a + b;
		a = v;
	}
#endif
}