2

モジュロ演算子から紛らわしい結果を得るのはこれが2回目なので、それがどのように機能するかについて何かが欠けているに違いないと確信しています。この関数は、数値を受け取り、その桁を配列へのポインターとして返すことになっています(最初の要素は桁数を示します)。実際には、最初のインデックスの後のすべてのインデックスに元の番号が含まれている配列を返します。

int *getDigits(int n)
{
        int digits = log10(n)+1;
        int i = 1;
        int *digit = malloc((digits+1) * sizeof(int));
        if (digit == NULL) { printf("error\n"); }
        digit[0] = digits;
        for (i = 1; i < digits+1; i++) {
                int blah = (int) pow(10,i);
                printf("digit[%d] = remainder of %d divided by %d\n",i,n,blah);
                digit[i] = (n%blah);
                printf("%dth digit %d\n",i,n);
        }
        return digit;
}

実行すると、各反復は次のようになります。

checking 500996
digit[1] = remainder of 500996 divided by 10
1th digit 500996
digit[2] = remainder of 500996 divided by 100
2th digit 500996
digit[3] = remainder of 500996 divided by 1000
3th digit 500996
digit[4] = remainder of 500996 divided by 10000
4th digit 500996
digit[5] = remainder of 500996 divided by 100000
5th digit 500996
digit[6] = remainder of 500996 divided by 1000000
6th digit 500996
4

2 に答える 2

3

モジュロの結果をdigit[i]に格納しますが、それを出力しません。

digit[i] = (n%blah);
printf("%dth digit %d\n",i,n);

n % blahnまたはblahを変更せず、結果を返すだけです。

于 2010-09-13T07:51:14.723 に答える
1

常に入力を印刷しているようです。

    printf("%dth digit %d\n",i,n);
于 2010-09-13T07:51:48.200 に答える