" file_name.exe已停止工作"

时间:2016-06-08 04:30:27

标签: c

这个问题来自spoj。有关问题,请参阅this。 你会看到我的逻辑很简单。如果我将动态形式的数组大小更改为静态大小,代码将执行并请求整数,并且无限期地继续执行,同时应运行测试用例的数量。但是,如果我保持动态,我会不断收到此持久性错误:file_name.exe已停止工作。

另外请注意我的代码。

#include <stdio.h>
#include <conio.h>

int main()
{
    int n, i, count, k, tcs, j, l, m;
    scanf("%d", tcs);
    int fact[tcs];
    int arr[tcs];
    for (j = 0; j < tcs; j++) {
        scanf("%d", &arr[j]);
    }

    int calc_fact(n) {
        if (n == 1)
            return 1;
        else
            return n * calc_fact(n - 1);
    }

    j = 0;
    m = 0;
    while (m < tcs && j < tcs) {
        fact[m] = calc_fact(arr[j]);
        m++;
        j++;
    }

    m = 0;
    for (l = 0; l < tcs; l++) {
        i = 1;
        count = 0;
        while (i <= fact[m]) {
            if ((fact[m]) % i == 0)
                count++;
            i++;
        }
        m++;
        k = (count) % ((10 ^ 9) + 7);
        printf("\n%d", k);
    }
    return 0;
}

1 个答案:

答案 0 :(得分:0)

假设您使用的是C ++,您需要在代码中更改一些内容:

  1. scanf("%d", tcs);应该是scanf("%d", &tcs);这个错误是您的程序崩溃的原因,因为tcs没有正确的预期价值。
  2. 函数int calc_fact(n)应位于带有原型int calc_fact(int n)的main()函数之外。由于这个错误,您的代码首先不会编译(当您说静态声明数组时,您是否确定代码符合要求)?
  3. 请参阅以下修改后的代码:

    #include <stdio.h>
    //#include <conio.h>                    //You actually don't need it.
    
    int calc_fact(int n)
    {
        if(n==1)
            return 1;
        else
            return n*calc_fact(n-1);
    }
    
    int main()
    {
        int n, i, count, k, tcs, j, l, m;
        scanf("%d", &tcs);
        int fact[tcs];
        int arr[tcs];
        for(j=0; j<tcs; j++)
        {
            scanf("%d", &arr[j]);
        }
    
        j=0;
        m=0;
        while(m<tcs && j<tcs)
        {
            fact[m]=calc_fact(arr[j]);
            m++;
            j++;
        }
    
    
        m=0;
        for(l=0; l<tcs; l++)
        {
            i=1;
            count=0;
            while(i<=fact[m])
            {
                if((fact[m])%i==0)
                count++;
                i++;
            }
        m++;
        k=(count)%((10^9)+7);
        printf("%d\n", k);            //and not printf("\n%d", k);
    
        }
    
        return 0;
    }
    

    工作代码here