#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define mod 1000000007
int main()
{
unsigned long long int n,i,j,k;
unsigned long long int *power = (unsigned long long int *)malloc(sizeof(unsigned long long int) * (1000000000LL));
power[0] = 1;
for(i = 1;i <= 1000000000LL;i++){
power[i] = (power[i-1] * 2 ) % mod;
}
int t;
scanf("%d",&t);
while(t--){
scanf("%lld",&n);
unsigned long long int f = 2;
for(i=2; i<=n;i++){
f = (f + power[i/2]) % mod;
}
printf("%llu\n",f);
}
return 0;
}
问问题
163 次
4 回答
6
肯定power[1000000000]
是越界了!您的数组没有那么多元素。你需要<
,而不是<=
在循环中。
于 2012-09-03T14:25:39.117 回答
4
您应该检查是否malloc
正确分配power
。
于 2012-09-03T14:25:10.587 回答
2
因为您没有测试malloc的返回值。它通过给出 NULL 失败(例如,当内存不足时)。
于 2012-09-03T14:25:39.150 回答
0
这不是一个好主意
for(i = 1;i <= 1000000000LL;i++){
无论如何,索引都是从零开始的,但是您应该将 a 替换为<=
a<
以防止读取超出数组的末尾
还考虑到您尝试分配的数组的大小,您应该检查您的power
指针是否有效。
于 2012-09-03T14:26:50.240 回答