4

だから私は数字を取る関数を持っています。テスト目的で123としましょう。各数字を配列内の場所に挿入することで配列に変換します。私の問題は、これを逆に行うことです。したがって、この場合の 123 は 321 として出力されます。これを変更する方法について何か考えはありますか?

int i = 0;

while (number) {
    array[i] = number % 10;
    number /= 10;
    printf("%llu", array[i]);
    i++;
}
4

4 に答える 4

5

これは、数値と 10 の間の除算の余りを取得しているためです。つまり、配列の最初の位置に挿入する最後の数字を取得しているためです。

再帰関数を作成して、必要な方法で配列を埋めることができます。次のようなことを試してください:

void
fillArray (int array[], int *i, int number) {
    if (number < 10 ) {
       array[*i] = number;
       *i = *i +1;
    } else {
       fillArray (array, i, number/10);
       array[*i] = number%10;
       *i = *i +1;
    }
}

最後に、i には配列のサイズが表示されます。次のように関数を呼び出す必要があります。

int array[100];
int i = 0;
int n = 123;
fillArray (array,&i,n);
于 2012-09-16T00:22:51.850 に答える
2

変換が完了したときにその長さを知っているので、いつでも配列を元に戻すことができます。

于 2012-09-16T00:34:09.200 に答える
0

変更方法に関する私の考え: 標準関数を使用しますitoa()。それができない場合は、少なくとも のソース コードを読む必要がありますitoa()

于 2012-09-16T00:26:54.777 に答える
0

他の方法もできます。指定された数の log10(n) を取得します。

enter code hereint nd、f、i=0; nd=log10(n) f=pow(10,nd);

            while(n)
             {
                       array[i++]=n/f;
                       n=n%f;
             }
于 2012-09-16T00:50:27.770 に答える