7个回答
展开全部
错误不少。
定义数组a[]的时候,为了确保数组获得可靠、可信的内存单元,数组的长度必须是一个确定的值,所以变量n还不确定的时候,不能定义为a[n]。否则的话,数组a[]中的元素是不确定的,不能直接使用,而且虽然可以使用a[下标]来读取到一个值,但是这样的操作是很危险的,因为读取到的这个值或许是其它程序或系统正在使用的内存单元的值,要是再对a[下标]赋值来改变了这个值的话,还会影响到其它程序或系统,产生危害其它程序或系统正常运行的隐患。
unsigned long int型,匹配的格式符是%ld。
for循环里,使用对a[n]赋值存在隐患,具体就是上面第1点说的,因为在定义数组a[]的时候,并没有为数组a[]分配一个独立的内存空间。
语句「return 0」的末尾,缺少了分号。
其实可以不用定义数组,只要定义3个变量能够参与运算就可以了,示例代码如下,
#include <stdio.h>
int main()
{
unsigned long int n, a0, a1, an, i, k;
a0 = 1;
a1 = 1;
scanf("%ld", &n);
if (n == 1)
printf("%ld\n", a0 % 10007);
else if (n == 2)
printf("%ld\n", a1 % 10007);
else
{
for (i = 2; i < n; i++)
{
an = a0 + a1; // f(n) = f(n-2) + f(n-1)
a0 = a1; //为下一次计算做准备,
a1 = an; //下一次计算的两个加数就是现在的数列中的最后两个数
}
printf("%ld\n", an % 10007);
}
return 0;
}
如有帮助,烦请点采纳,谢谢!
展开全部
提示得很清楚了,直接求fn肯定是溢出的,下面是我的ac代码
#include <stdio.h>
int main()
{
int i, n;
int f1 = 1, f2 = 1, fn = 1;
scanf("%d", &n);
for(i = 0; i < n-2; ++i){
fn = f1 + f2;
if( fn >= 10007 )
fn %= 10007;
f1 = f2;
f2 = fn;
}
printf("%d", fn);
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
除了a[n]其他设置为int类型就够了。最后的printf里改成%llu。(我也忘了是不是%llu 反正%d最多只能输出int类型的最大值肯定错)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2019-03-06
展开全部
return 0后面少了个分号
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询