浮点异常(核心转储)非常微弱

Floating point exception(core dumped) very wierd

本文关键字:非常 转储 核心 异常      更新时间:2023-10-16

我知道这个问题已经被问过了,但我还没有找到答案。这是我的代码:

#include <cstdio>
#include <vector>
using namespace std;
int a[510];
int main()
{
    int n, p;
    bool rez;
    while(1)
    {
        p = 0;
        rez = 1;
        scanf("%d", &n);
        if(n == -1) break;
        for(int i = 0; i < n; i++) scanf("%d", &a[i]);
        // printf("a");
        for(int i = n-1; i >= 0; i--)
        {
            if((a[i]+p)%i)
            {
                rez = 0;
                break;
            }
            p++;
        }
        if(rez) printf("Sn");
        else printf("Nn");
    }
    return 0;
}

除测试用例外,所有测试用例都可以正常工作:4.1 1 3 0但是4.1 0 3 1作品同样在有问题的测试用例中,我插入了printf("a");但程序不打印它,这表明问题发生在该行之前。但是,如果我删除其余的代码,一切都会正常工作。

浮点异常不仅适用于浮点错误,也适用于整数除以0,包括取相对于0的模(作为πάΓτα-ῥεῖ在第一条评论中说)。您的i循环确实向下迭代到零。一旦发生这种情况,即当break语句没有为i的先前值触发时,您将看到浮点异常。