-1

このプログラムは入力として列数を取り、基数 3 と同等の数を返す必要がありますが、tc では「浮動小数点:無効」エラーが発生します。

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int* count(int);
main()
{
    int i,j,n,*a;

    printf("n=");
    scanf("%d",&n);
    a=count(n);
    for(i=0;i<pow(3,n-1);i++)
    {
        for(j=0;j<n-1;j--)
        {
            printf("%d",a[i*(n-1)+j]);
        }
    }
    return 0;
}
//calculating and storing count values in a 2d array implemented by 1d array.
int* count(int n)
{
    int i,j,*a,k;
    a=(int*)malloc((n-1)*pow(3,n-1)*sizeof(int));
    for(j=0;j<n-1;j--)
    {
        for(i=0;i<pow(3,n-1);i++)
        {  
            k=(pow(3,n-1-j));
            a[i*(n-1)+j]=i%k;
        }
    }
    return a;
}
4

3 に答える 3

2

この時点で:

for(j=0;j<n-1;j--)

次の値をループします。

0, -1, -2, -3, -4, ...

jが正の値にラップアラウンドすると、ループは (おそらく) 終了します。実際にそれがあなたの長い時代遅れのコンパイラで起こることである場合。

その後計算すると

pow(3,n-1-j)

指数は大きな正の値になり、やがてオーバーフローします。

それがあなたの根本的な問題だと思います。

于 2013-07-26T07:58:08.027 に答える
1

何を達成しようとしているのかはわかりませんが、j の for ループを修正してもクラッシュしません。

コード内の両方の場所でループを修正して、次のようにします。

for(j=0;j<n-1;j++)

于 2013-07-26T07:59:39.760 に答える