c - 如何存储多达 1,000,000,000 个元素

标签 c arrays size

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

int max_b(int,int);
int max(int[],int);

int main(){

    int num_tests;
    scanf("%d",&num_tests);
    int array_n[num_tests];
    int array_b[num_tests];
    int i,j;
    for (i=0;i<num_tests;i++){
        scanf("%d %d",&array_n[i],&array_b[i]);
    }
    for (j=0;j<num_tests;j++){
        int A = 1;
        int N = array_n[j];
        int B = array_b[j];
        int max_num_b;
        max_num_b = max_b(N,B);
        int array2[max_num_b];
        int k;
        for (k=0;k<max_num_b;k++){
            int num_a,num_b;
            num_a = N-(k+1)*B;
            num_b = k+1;
            array2[k] = num_a*num_b;            
        }
        printf("%d\n",max(array2,max_num_b));
    }

}

int max(int array[],int a){
    int max_num = 0,i;
    for (i=0;i<a;i++){
        if (array[i] > max_num){
            max_num = array[i];
        }
    }
    return max_num;
}

int max_b(int n,int b){
    return n/b;
}

我的第一个输入是测试用例数量 T(比如说 1),第二个输入是 1,000,000,000 1 。因此,代码试图形成一个 10^9 大小的数组,程序最终显示段错误。然而代码运行良好高达 1,000,000 1. 我怎样才能存储多达 10^9 个元素。如果不可能,那么我怎么能存储这么多数字。 我应该使用 malloc,如果是,那么如何。任何帮助将不胜感激。

最佳答案

您根本不需要存储这些数据。只需即时处理即可。

据我所知,以下代码产生与您发布的代码相同的结果,但不使用任何数组。

#include <stdio.h>

int main() {
    int k, t, N, B, max, num_tests;
    scanf("%d", &num_tests);
    while (num_tests--) {
        scanf("%d %d", &N, &B);
        for (k=N/B,max=0; k>0; k--) {
            t = (N-k*B) * k;
            if (t > max) max = t;
        }
        printf("%d\n", max);
    }
    return 0;
}

关于c - 如何存储多达 1,000,000,000 个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45077642/

相关文章:

image - 动态缩放 Canvas 大小以适应图像fabric.js

c++ - 如何在 C++ 中将十六进制转换为 IEEE 754 32 位 float

c# - SysInternal 的 ProcessMonitor 是如何工作的?

javascript - 有什么计算web KSLOC的好工具?

c++ - 在 C++ 中用十六进制值初始化一个无符号字符数组

c# - 字符串数组初始化

ios - 显示文件大小 : 1000b = 1kb or 1024b = 1kb?

C预处理器保留多行

c - 我如何像 scanf() 一样使用 getchar()?

c# - 将 ushort[] 转换为 byte[] 并返回