アホによる回答
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 }