C语言编程计算Fibonacci数列的前50项,并把结果存放在一个数组中,怎么编写

输出前50项,用数组,Fibonacci数列前两项的值是1。从第3项开始,其值为前两项之和... 输出前50项,用数组,Fibonacci数列前两项的值是1。从第3项开始,其值为前两项之和 展开
 我来答
司马刀剑
高粉答主

2019-05-31 · 每个回答都超有意思的
知道顶级答主
回答量:4.6万
采纳率:93%
帮助的人:7517万
展开全部
#include<stdio.h>/*若干项之后,这个值已经超出了int所能表示的范围了,所以不能用int来表示*/typedef unsigned long long int uint64;int main(){//int a[50],i;uint64 a[50];int i;a[0]=1;//a[1]=2;a[1]=1;printf("201723020602谷金鹏\n");printf("1,1,");//for(i=1;i<=49;i++)for(i=2;i<50;i++){a[i]=a[i-1]+a[i-2];//printf("%d,",a[i]);printf("%llu,",a[i]);}return 0;}
碧海风云

2019-05-31 · 碧海风的秘密小据点!
碧海风云
采纳数:909 获赞数:10281

向TA提问 私信TA
展开全部

斐波那契数列50项已经远远超出了int型变量所能存储的范围。确定要输出这么多列么。。。

题主核心目的是要计算方法吧,而不是非得50项?

#include <stdio.h>
#include <string.h>
#include <conio.h>

#define ARR_LEN 255 /*数组长度上限*/
#define elemType int /*元素类型*/

/* n项斐波那契数列 */
/* Fibonacci sequence */
/* 由0和1开始,之后诸项由之前的两数相加而得出 */
/* F0 = 0, F1 = 1, Fn = Fn-1 + Fn-2 (n≥2) */
int fibonacciSeq (elemType F[], int n) {
int i;
if (n > 46) /* 4字节int最大值为2147483647,故最大支持F46 = 1836311903 */
return 0;
F[0] = 0; F[1] = 1;
for (i=2; i<=n; i++)
F[i] = F[i-1] + F[i-2];
return 1;
}

/*打印数组*/
/* elemType arr[]: 打印目标数组; int len: 元素个数 */
void printArray (elemType arr[], int len) {
int i;
for (i=0; i<=len; i++) {
printf ("%d", arr[i]);
if (i!=len)
printf (", ");
}
putchar ('\n');
}

int main (void) {
elemType F[ARR_LEN];
int n;
int status; 

memset (F, 0, sizeof (F)); /* 数组所有元素初始化为0 */
n = 20;

status = fibonacciSeq (F, n);
if (status) {
printf ("The first %d Fibonacci numbers Fn for n = 0, 1, 2, ..., %d are: \n", n, n);
printArray (F, n);
}
else
puts ("Error!");

getch (); /*屏幕暂留*/
return 0;
}
追问
的确是要50项,而且真的超出了长度产生负值什么的,所以需要一个清楚明了的程序
追答

目的就是要看 超过int型范围后的表现么?

稍改动一下,你看看效果

#include <stdio.h>
#include <string.h>
#include <conio.h>

#define ARR_LEN 255 /*数组长度上限*/
#define elemType int /*元素类型*/

/* n项斐波那契数列 */
/* Fibonacci sequence */
/* 由0和1开始,之后诸项由之前的两数相加而得出 */
/* F0 = 0, F1 = 1, Fn = Fn-1 + Fn-2 (n≥2) */
int fibonacciSeq (elemType F[], int n) {
int i;
F[0] = 0; F[1] = 1;
for (i=2; i<=n; i++)
F[i] = F[i-1] + F[i-2];
return 1;
}

/*打印数组*/
/* elemType arr[]: 打印目标数组; int len: 元素个数 */
void printArray (elemType arr[], int len) {
int i;
for (i=0; i<=len; i++) {
printf ("%d", arr[i]);
if (i!=len)
printf (", ");
}
putchar ('\n');
}

int main (void) {
elemType F[ARR_LEN];
int n;
int status; 

memset (F, 0, sizeof (F)); /* 数组所有元素初始化为0 */
n = 50;

status = fibonacciSeq (F, n);
if (status) {
printf ("The first %d Fibonacci numbers Fn for n = 0, 1, 2, ..., %d are: \n", n, n);
printArray (F, n);
}
else
puts ("Error!");

getch (); /*屏幕暂留*/
return 0;
}

如果就是要正确地输出50项,那需要用8字节的long long型来存储

本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式