解析: 题目的意思不太清楚,网上也差不到解析,不过看题目的架势好像是要求斐波那契数列。所以就把以前的代码贴上了。
由于很重要,我又贴了一遍。
1 #include <stdio.h> 2 #include <string.h> 3 static void large_add(void); 4 static void initialize(void); 5 #define N 300 6 static char *p2; 7 static char s1[N], s2[N],temp[N]; 8 static char *p1; 9 static char fei[55][N]; 10 int main() 11 { 12 int a, i; 13 initialize(); 14 strcpy(fei[0],"0"); 15 strcpy(fei[1],"1"); 16 strcpy(fei[2],"1"); 17 for(i = 3; i < 55; i++){ 18 large_add(); 19 strcpy(fei[i],p1); 20 } 21 while(scanf("%d", &a) == 1 && a){ 22 a++; 23 printf("%s\n",fei[a]); 24 } 25 return 0; 26 } 27 /*计算字符串s1 + s2*/ 28 static void large_add(void) 29 { 30 /*默认p1与p2均指向要相加的正确的位置*/ 31 int i, t, t2; 32 int l1 = strlen(p1) - 1; 33 int l2 = strlen(p2) - 1; 34 char *p = p1 - 1; 35 strcpy(temp,p1); 36 t2 = l1 - l2; 37 *p = '0'; 38 l1++; 39 t = l1 - l2; 40 for(i = l1; i - t >= 0; i--) 41 p[i] += p2[i - t] - '0'; 42 /*相加与进位要分割开来*/ 43 for(i = l1; i > 0; i--){ 44 if(p[i] > '9'){ 45 p[i] -= 10; 46 p[i-1]++; 47 } 48 } 49 if(*p == '0') 50 p++; 51 p1 = p; 52 p2 -= t2; /*p2的空间顶多比原来的p1小一位*/ 53 strcpy(p2,temp); 54 } 55 /*初始化字符串*/ 56 static void initialize(void) 57 { 58 /*令s1值为1,s2值为1*/ 59 s1[N-2] = '1'; 60 s2[N-2] = '1'; 61 s1[N-1] = '\0'; 62 s2[N-1] = '\0'; 63 p1 = &s1[N-2]; 64 p2 = &s2[N-2]; 65 }