很基础的斐波那契,为何我输入偶数就停止运行。
本帖最后由 chinalixs 于 2015-2-9 14:10 编辑斐波那契这个方法太多了。
但我发现几个问题。
一个是用普通的写法,当N大于48的时候,数会变成负的,网上搜了也有变成负数的,关键不知道怎么解决。求助!
你可以自己随手写一个试试,我就不上图了。
第二个问题,我用这个写法为何输入奇数能数出结果,输入偶数就运行错误呢。我刚入门,完全找不到错误。谢谢大家了!
上代码:
#include<stdio.h>
#include<malloc.h>
int main(){
int i,n;
scanf("%d",&n);
int* arr=(int *)calloc(n,sizeof(int));
arr=arr=1;
for(i=2;i<=n;i++)
{
arr=arr+arr;
}
printf("%d",arr);
return 0;
}
变成负数是因为超出了int类型的最大数字限制导致溢出。你可以使用double等替代,下面是我的简单粗暴的代码~
#include<stdio.h>
main()
{
double a=0,b=1,c,i,n=1;
scanf("%lf",&i);
for(;n<i;n++)
{
c=a+b;
a=b;
b=c;
}
if(i==0) c=0;
if(i==1) c=1;
printf("%0.0lf",c);
} 这个是我帮你改过的
#include<stdio.h>
#include<malloc.h>
int main(){
int i,n;
scanf("%d",&n);
double* arr=(double *)calloc(50,sizeof(double));
arr=0.0;
arr=1.0;
for(i=2;i<51;i++)
{
arr=arr+arr;
}
printf("%0.0lf\n",arr);
return 0;
} 第一个问题如homer所说。我的话,就用long。
至于第二个问题,我试了下,不会诶。=_= 啦啦啦 楼主~
问题一:
int的范围是 -(2^31) ~ (2^31-1),也就是-2147483648 ~ 2147483647;
你看看当n = 47 时 F(n) = 2971215073 >2147483647 ,其实这个时候结果就已经溢出了,不正确了~
可以用long long int类型~ 它的范围是-(2^61) ~ (2^61-1),更安全,当然也有界限。
问题二:
楼主的代码没有问题,但是你看看for语句运行到了 i = n,而你动态分配的数组a 只有n个空间,a是数组越界的哦~
至于为什么奇偶不同结果,应该和编译器的处理错误的环境有关,至少我用codeblocks 就可以得到正常结果。
{:301_986:} homer 发表于 2015-2-9 14:23
变成负数是因为超出了int类型的最大数字限制导致溢出。你可以使用double等替代,下面是我的简单粗暴的代码~ ...
谢谢啦。你们俩真好。 homer 发表于 2015-2-9 14:48
这个是我帮你改过的
#include
#include
谢谢啦。你们俩真好。 homer 发表于 2015-2-9 14:23
变成负数是因为超出了int类型的最大数字限制导致溢出。你可以使用double等替代,下面是我的简单粗暴的代码~ ...
亲。如果现在我想对c取余怎么办!c是double类型。。。 Anonymouss 发表于 2015-2-9 19:38
啦啦啦 楼主~
问题一:
果真是codeblocks更强大。可惜比赛限定了编译环境。我再想办法解决! Anonymouss 发表于 2015-2-9 19:38
啦啦啦 楼主~
问题一:
帮忙看下我换了longlong int 怎么不输出!没有语法错误。上代码
#include<stdio.h>
main()
{
long long int a=1,b=1,c,n,i=1;
scanf("%d",&n);
for(;i<n;i++)
{
c=a+b;
a=b;
b=c;
}
if(n==1) c=1;
if(n==2) c=1;
printf("%d",c);
}
页:
[1]
2