杭电ACM2085错在哪?我对提示不是很理解

2025-01-05 03:12:16
推荐回答(2个)
回答1:

提示可以使用long long int对付GNU C++,使用__int64对付VC6
就是说明程序中值有可能非常大,long的值肯定不够。32位机器上long是4字节,也就是32位,__int64 是64位。
程序中对n的值有限制,公式也给我们了,可以用个数组把所有的n值对应的高位,低位求出。
#include
int main(void)
{
int n, i;
__int64 g[34] = {1};
__int64 d[34] = {0};
for (i = 1; i < 34; i++)
{
g[i] = 3 * g[i - 1] + 2 * d[i - 1];
d[i] = g[i - 1] + d[i - 1];
}
while (scanf("%d", &n), n != -1)
printf("%I64d, %I64d\n", g[n], d[n]);
return 0;
}

回答2:

你好!!
没有错误吧:
测试如下:
3
41,15
6
2131,780
1
3,1
-1
Press any key to continue