首页 > 解决方案 > 当我插入较大的数字时程序崩溃

问题描述

我在网上解决一个问题。我已经编写了代码并且它大部分时间都可以工作,除非我输入的数字比平时大(1000 到 2000)。当我这样做时,程序崩溃并返回一个非常小的负数。这可能是什么原因?

是问题的链接。

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

int main() {
    int z, T;
    scanf("%d", &T);
    for (z = 0; z < T; z++) {
        int i, j, N, P;
        scanf("%d%d", &N, &P);
        int days[3651] = { 0 };
        int hartal[10];
        int count = 0;

        for (i = 0; i < P; i++) {
            scanf("%d", &hartal[i]);
        }

        for (i = 1; i < N + 1; i++) {
            days[6] = 2;
            days[6 + (i * 7)] = 2;
            days[7] = 2;
            days[7 + (i * 7)] = 2;
        }

        for (i = 0; i < P; i++) {
            int a = hartal[i];
            for (j = 0; j < N + 1; j++) {
                if (j % a == 0 && days[j] != 2) {
                    days[j] = 1;
                }
            }
        }

        for (i = 1; i < N + 1; i++) {
            if (days[i] == 1) {
                count++;
            }
        }

        printf("%\n%d\n", count);
    }
    return 0;
}

标签: c

解决方案


days[6+(i*7)] = 2;

当i > 520时,该行代码可能超出范围(也就是您将尝试访问数组天数范围之外的索引。)。


推荐阅读