-1

基本的に、10進数を別の基数(基数2など)の数値に変換するメソッドがあります。配列の位置0の要素が最も重要で、たとえば$ 100、1が最も重要です。

ACを出力するはずの文字列を入力すると、CA(Decからhex)が得られます。Cでこのchar配列を逆にするにはどうすればよいですか?

char* decimalToRadixN(int decimalNumber, int radixN, char result[]){
    /*
        If its below base 10, its going to be a digit convertsion (ex to binary)
        If it's above base 10, we need to call a method to convert the char to a symbol. 
     */

        //char swap[] = result[];

    int count = 0; 
    while(decimalNumber>0)
    {
        int remain = decimalNumber % radixN;
        result[count] = decimalToSymbol(remain);
        decimalNumber = decimalNumber / radixN; 
        count++;
    }

    /*
    for(int i = 0; i < count; i++)
    {
          reverse the array
    }
    */ 
  return result;
}
4

2 に答える 2

2
int i, j;
for( i = 0, j = count - 1; i < j; i++, j-- )
{
    char temp = result[ i ];
    result[ i ] = result[ j ];
    result[ j ] = temp;
}
result[ count ] = '\0';
于 2011-09-09T00:10:47.083 に答える
0

尋ねられた質問に対する答えは完全ではありませんが、そもそも正しい順序で数字を書いてみませんか?

間違いなく、必要な桁数がわからなかったため、どこから書き始めるかがわかりませんでした。

これは、基数の底に数値の対数を取ることによって行うことができます。これは、対数の規則を使用して実行できます。

int numDigitsForRadix(double decimalNumber, double radixN)
{
    double numDigits = log(decimalNumber)/ log(radixN);
    int intDigits = (int)numDigits + 1;
    return intDigits;
}

['decimalNumber'が実際には10進数ではないことにも注意してください。これはCintであり、実際にはバイナリです。これは単なる命名であり、違いはありません。から基数10として表示されるのは、数自体ではなく、printf()の解釈です。]printf()

これで、指定されたベースの桁数がわかりました。その桁に書き込んで、インクリメントではなくデクリメントします。

また、利用可能な長さの結果を渡すと、必要なものを利用可能な長さに対して事前に確認し、エラーコード(例NULL)を返すことができます。

また、nullで終了することを忘れないでください。そうでない場合は、書き込まれた文字列の長さを返すためのサポートを提供してください。

于 2011-09-09T00:37:21.077 に答える