-9
#include<stdio.h>

int max = 100;

int main()
{
    int a,j;

    int * arr = (int*)malloc(sizeof(int)*max);
    arr[max-1] = 1;
    scanf("%d",&a); 
    factor( arr, a);
    display(arr);
}

int factor( int arr[],int a)
{
    if (!a) return;
    int i,carry;
    for(i=max-1;i>=0;i--)
    {
        arr[i] = (arr[i]*a) + carry;
        carry = arr[i]/10;
        arr[i] = arr[i]%10;

    }
    factor( arr, a-1);
}   

int display(int arr[])
{
    int i;
    for ( i=0; i<max; i++)
    {
        printf("%d",arr[i]);
    }
}

こんにちは、これは数字の階乗を見つけるための私のプログラムですが、間違った答えを出す理由はわかりません...???

私が入力を 13 として与えるときのように、myprogram によると 13 は配列で 1 と 3 として扱われますが、乱数 -1216731443 -121673144 を与えます。malloc に問題があると思いますが、特定できません。

ありがとうございました

4

1 に答える 1

4

「乱数」を取得している理由は、carry変数を初期化していないためだと思います。forループでは、初期化されていない値を配列に追加しているためcarry、未定義の結果が生じます。

于 2012-05-26T06:56:46.907 に答える