#include<stdio.h>
int fib(long n)
{
if(n<=1)
return 1;
return fib(n-1)+fib(n-2);
}
main()
{
long n,x;
scanf("%ld",&n);
x=fib(n);
printf("%ld
",x);
getch();
}
输入N为23 的时候就出现负值了,但是在输入22的时候还是正确答案,求解
【C语言】有没有大佬知道这个程序为什么会输出一个负数?
程序会输出负数的原因是,在这个程序中你没有对每次运算的结果进行检查,因此当乘积超出了long类型的最大值时,就会产生溢出,导致结果为负数。为了避免这个问题,你可以在每次运算后检查结果是否已经超出了long类型的范围,并在必要时退出循环。可以这样改:include<stdio.h> main(){ long i;i=chengji(...
c语言问题,为什么会输出负数
这个问题有多种可能,不一而足。算法有错误,最终计算结果是负数。输出自然会是负数。例如:int a=1;int b=a-2;printf("b=%d",b);\/\/输出结果:b=-1超过变量类型的最大取值范围,发生溢出。例如Turbo C里int是16位,取值范围-32768~32767。如果计算过程当中,数值超过32767,由于补码的关系。结...
C语言程序,结果会出现负0,请问怎么办?
这是圆周率数值的截断误差引起的,算出的向量就是接近0的负数。要想得正0,圆周率给个 (四舍)五入值:pai=3.14159265359;就可以了。但不能保证别的特殊的输入数会不会 该正0 出现负0。
C语言运行结果的时候为什么会出现负数
必然是溢出了。
C语言中让两个正的int型变量相加的程序为什么运行结果会出现负数?
因为int是有最大限制的,当相加的结果超出这个限制之后,(就是所谓的溢出),最高位可能会变为1,也就是表示负数,所以结果为负数
c语言中数值没有超过double为什么输到一半变负数了
c语言中数值没有超过double为什么输到一半变负数了?回答如下:是因为网络不兼容,第一步首先是打开安全设置和操作指南,第二步是针对问题分析方案,多实践,得以解决。
一道C语言题,为什么输出的结果为负数?
你的主要原因是变量w没有初始化,是内存中的遗留值,导致最后输出的结果中全部学生的平均值为2000多的一个负数。修改后源码软下:include <stdio.h>#include <stdlib.h>#define input scanfstruct student{ char num[10]; char name[10]; int score[3]; int total; float avr;}...
C语言问题,输出结果总是负数,求教
你定义的类型不一致,前边定义是双精度double的实数,后边输出用的是%f单精度的浮点型,这两个数精度差太多,在C++里double输出用的是%lf,你看看这里是不是,要么把前边类型改成float,要么后边输出改成%lf
C语言 为什么我这个程序输入正确数后 结果总为负数
那么长的结果 你不把数据类型改长一点 那么就会数据溢出 变成负数的
为什么C语言算出来是负数?大神们帮忙检查一下吧
你的m的初步估计是3的8次方4的8次方乘以2 144194 然后肯定是超出界限了。。int是2个字节。。也就是16位,第一位是数据的正负0正1负,15位是数值最大的值是32767 超出了。。。然后你最后结果的反正是超出范围了。,。最终是哪里超出的就不一定是最后了。。。当你m还在循环的时候就超出了。。