【发布时间】:2013-03-10 17:14:23
【问题描述】:
我试图在项目 euler click here 上使用 C 来解决问题 这是代码。它适用于 10 个值,但对于 1000 个值,它会给出错误的输出。我注意到它在 32 之前给出了正确的输出。我认为我超出了内存或其他东西。这么大的数组如何分配内存?
#include <stdio.h>
int main() {
int a[10], i, sum=1, b=0;
for(i = 1; i < 10; i++) {
a[0] = 1;
a[i] = sum + a[i-1];
sum = sum + a[i-1];
}
for(int j = 1;j > 0; j++) {
b = b + sum%10;
if(sum<10)
break;
sum = sum/10;
}
printf("%d\n",b);
return 0;
}
【问题讨论】:
-
int类型无法容纳所需的值。您需要用不同的方法解决问题(提示:使用char的数组将数字表示为字符串)。 -
如果我的复制/粘贴能力很强,2 的 1000 次方是
10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069###(最后 3 位被删减) -
只使用 Wolfram Alpha,哈哈。
-
遗憾的是,这甚至不适合 uint64_t。现在有两种方法,要么使用 GMP,要么有争议的“使用 Python”,因为默认情况下它的标准库中有大量数据。或者,当然,自己动手:P
-
检查可以打印出来的 2 的幂。看看每个数字的位置,看看你能不能推断出一个模式。看数字的总和。那里有模式吗?看看你从 2**i 到 2**(i+1) 会发生什么。那里有什么模式吗?
标签: c arrays math memory-management