gpt4 book ai didi

c - 2 的幂,试图达到 2^1000,段错误

转载 作者:行者123 更新时间:2023-12-04 11:19:19 25 4
gpt4 key购买 nike

我正在构建一个程序,它将乘以 2,并得到很长的准确数字。在这里,我构建了一个程序,其中每个数字都存储在不同的变量中。当我编译程序并输入 2^63 时,它给出了正确答案。但是当我输入 2^64 时,我得到一个“Segmentation fault”。

这是什么?我能做什么?

#include <stdio.h>
int main(void)
{
printf("2^n, enter n: ");
int n, array = 1;

scanf("%d", &n);
int num[array];

num[0] = 2;
int remainder = 0;
if (n > 1) {
int counter = 0;
int counter3 = 1;

for (counter3 = 1; counter3 < n; counter3++) {
remainder = 0;

for (counter = 0; counter < array; counter++) {
num[counter] *= 2;
num[counter] += remainder;
remainder = 0;

if (num[counter] / 10 != 0) {
remainder = num[counter] / 10;
num[counter] -= remainder * 10;
if (counter+1 >= array) {
array++;
num[counter+1] = remainder;
remainder = 0;
break;
}
}
}
}
}

int counter2;
for (counter2 = array - 1; counter2 >= 0; counter2--)
printf("%d", num[counter2]);

putchar('\n');
return 0;
}

最佳答案

我觉得你的问题是

int num[array];

这是一个静态数组,一旦它的大小声明为 1 的大小(array=1 仅在上面的几行),那么这就是数组的大小。

大数字库非常复杂,最好留给第 3 方库。

尝试查看 GMP

如果你必须自己做,尝试使用像 std::vector 这样的动态数组类

关于c - 2 的幂,试图达到 2^1000,段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3670313/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com