#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;
}
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に置き換える必要があります<
また、割り当てようとしている配列のサイズを考えると、power
ポインタが有効であることを確認する必要があります。
于 2012-09-03T14:26:50.240 に答える