C语言这个问题为什么到一定程度就会出负数?
#include<stdio.h>#definemaxsize100000longcalculate(longk);longc[maxsize]={0};longa,b;...
#include<stdio.h>
#define maxsize 100000
long calculate(long k);
long c[maxsize]={0};
long a,b;
int main()
{
long k;
scanf("%ld%ld%ld",&a,&b,&k);
c[k]=calculate(k);
printf("%d\n",c[k]%1000000007);
}
long calculate(long k)
{
if(c[k]!=0)return c[k];
if(k==1)return a;
else if(k==2)return b;
else c[k]=a*calculate(k-1)+b*calculate(k-2);
return c[k];
}
该怎么纠正,我是用了记忆法,优化时间
但到了k=100就出现-98343234121 为什么呢 不正常数据 展开
#define maxsize 100000
long calculate(long k);
long c[maxsize]={0};
long a,b;
int main()
{
long k;
scanf("%ld%ld%ld",&a,&b,&k);
c[k]=calculate(k);
printf("%d\n",c[k]%1000000007);
}
long calculate(long k)
{
if(c[k]!=0)return c[k];
if(k==1)return a;
else if(k==2)return b;
else c[k]=a*calculate(k-1)+b*calculate(k-2);
return c[k];
}
该怎么纠正,我是用了记忆法,优化时间
但到了k=100就出现-98343234121 为什么呢 不正常数据 展开
4个回答
展开全部
数值溢出就会是负数,这个跟计算机的存储机制有关,存储负数是用二进制最高位作为负号标记,如果最高位是1就会是负数,数值超出类型的表示范围就会把最高位变成1了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
没有太仔细看,目测可能是溢出了。建议采用无符号类型。
把数组c,还有calculate的返回值改成unsigned long.
把数组c,还有calculate的返回值改成unsigned long.
追问
为什么我用longlong 类型 VC6编译器报错呢
追答
它没有这个数据类型吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不明白为什么定义long double
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询