| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2430 人关注过本帖
标题:输出Fibonacci数列中的前N项(从2开始输出的头3个数0 1 1 没有输出)
取消只看楼主 加入收藏
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
结帖率:99.76%
收藏
已结贴  问题点数:20 回复次数:11 
输出Fibonacci数列中的前N项(从2开始输出的头3个数0 1 1 没有输出)
程序代码:
#include <stdio.h>

#define  max 50

void char_add(char* a,char* b,char* c)
{
    int ia[max]={0};
    int ib[max]={0};
    int ic[max]={0};
    int flag=0,flag2=0;
    int i,j;
    for(i=0;i<max;i++)
    {
        if(a[i]=='\0') ia[i]=0; else  ia[i]=a[i]-'0';
        if(b[i]=='\0') ib[i]=0; else  ib[i]=b[i]-'0';
    }
    //加法运算这个循环没啥问题了,不需要再改进了
    for(i=max-1;i>=0;i--)
    {
        ic[i]=ia[i]+ib[i]+flag;
        if(ic[i]>9) {flag=1;ic[i]-=10;} else flag=0;
    }
       for(j=0;j<max;j++) {c[j]=ic[j]+'0';}
       c[j]='\0';
}

int main()
{

 
    char a[max]={'\0'};
    char b[max]={'\0'};
    char c[max]={'\0'};
    int i,j;
    a[max-1]='1';
    b[max-1]='1';
    j=0;
    while(j<48)
    {
        char_add(a,b,c);
        for(i=0;i<max;i++)
        {
            a[i]=b[i];
            b[i]=c[i];
        }
        j++;
        printf("%s\n",c);
    }
    return 0;
}


[ 本帖最后由 wp231957 于 2012-12-6 16:02 编辑 ]
搜索更多相关主题的帖子: max color 
2012-12-05 21:08
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
计算了接近500个Fibonacci数列  用时不到1秒  却是挺快的

DO IT YOURSELF !
2012-12-05 21:14
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
以下是引用一个孩子在2012-12-5 21:17:56的发言:

要不要每次都这么变态,兄台
不懂  咋变态了呢

DO IT YOURSELF !
2012-12-05 21:18
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
谢谢小曹帮忙测试

DO IT YOURSELF !
2012-12-06 07:32
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
程序代码:
                                                                                                    2
                                                                                                    3
                                                                                                    5
                                                                                                    8
                                                                                                   13
                                                                                                   21
                                                                                                   34
                                                                                                   55
                                                                                                   89
                                                                                                  144
                                                                                                  233
                                                                                                  377
                                                                                                  610
                                                                                                  987
                                                                                                 1597
                                                                                                 2584
                                                                                                 4181
                                                                                                 6765
                                                                                                10946
                                                                                                17711
                                                                                                28657
                                                                                                46368
                                                                                                75025
                                                                                               121393
                                                                                               196418
                                                                                               317811
                                                                                               514229
                                                                                               832040
                                                                                              1346269
                                                                                              2178309
                                                                                              3524578
                                                                                              5702887
                                                                                              9227465
                                                                                             14930352
                                                                                             24157817
                                                                                             39088169
                                                                                             63245986
                                                                                       
删掉了部分演示数据,原因  对于电脑慢的机器  打开这么长的文本是种折磨啊

[ 本帖最后由 wp231957 于 2012-12-6 11:00 编辑 ]

DO IT YOURSELF !
2012-12-06 08:10
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
帖子编辑框最多只能输入30000字  所以只贴出了一部分数据

DO IT YOURSELF !
2012-12-06 08:11
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
以下是引用beyondyf在2012-12-6 10:45:17的发言:

那我也写一段和万哥交流吧。输出比较多,建议输出到文件再查看。

这段代码稍加改动即可完成原来那个朋友要做的题目。
#include
 
#define MAX_N    500
#define MAX_LEN    128
 
int main()
{
    char f[MAX_N][MAX_LEN] = {"1","1"};
    int a[MAX_LEN] = {1}, b[MAX_LEN] = {1}, c[MAX_LEN] = {};
    int *p = c, *p1 = b, *p2 = a, *pt;
    int i, j, t;
   
    for(i = 2; i < MAX_N; pt = p2, p2 = p1, p1 = p, p = pt, i++)
    {
        for(t = j = 0; j < MAX_LEN; t = p[j] > 9 ? p[j] -= 10, 1 : 0, j++) p[j] = p1[j] + p2[j] + t;
        for(j--; !p[j]; j--);
        for(t = 0; j >= 0; f[t++] = p[j--] + '0');
    }
            
    for(i = 0; i < MAX_N; printf("F[%03d] = %s\n", i, f));
   
    return 0;
}
太精炼了   晚上回去研究
另:我发现杨兄弟的代码有个特点  那就是本来应该是循环体内部的东东,你都放到for后面的括号里
问一下,这么做 除了代码精炼之外 还有其他好处吗

DO IT YOURSELF !
2012-12-06 10:52
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
c[MAX_LEN] = {};
这里是笔误吗
我电脑里要int c[MAX_LEN] = {0};才能编译通过

DO IT YOURSELF !
2012-12-06 11:05
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
简单的改了改
程序代码:
#include<stdio.h>

#define MAX_N      50
#define MAX_LEN    128

int main()
{
    char f[MAX_N][MAX_LEN] = {"1","1"};
    int a[MAX_LEN] = {1};
    int b[MAX_LEN] = {1};
    int c[MAX_LEN] = {0};
    int *p  = c;
    int *p1 = b;
    int *p2 = a;
    int *pt;
    int i, j, t;

 
    for(i = 2; i < MAX_N; i++)
    {
  
        for(t = j = 0; j < MAX_LEN; j++)
        {
            p[j] = p1[j] + p2[j] + t;
            if(p[j]>9) {t=1;p[j]-=10;} else t=0;
        }
        for(j = MAX_LEN - 1; p[j] == 0; j--);
        for(t = 0; j >= 0; t++) { f[i][t] = p[j] + '0';j--;}
        pt = p2;
        p2 = p1;
        p1 = p;
        p  = pt;
    }
         
    for(i = 0; i < MAX_N;i++) printf("F[%03d] = %s\n", i, f[i]);

 
    return 0;
}


[ 本帖最后由 wp231957 于 2012-12-6 13:23 编辑 ]

DO IT YOURSELF !
2012-12-06 12:13
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
好像我知道是干啥的了

但是我不明白这句代码怎么理解
for(j--; !p[j]; j--);    一般循环有起步条件 终止条件  步长  这里2个J--就给我弄迷糊了

DO IT YOURSELF !
2012-12-06 12:22
快速回复:输出Fibonacci数列中的前N项(从2开始输出的头3个数0 1 1 没有输出)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024541 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved