0

基数 (2-9) から基数 10 に変換しようとしています。これを行うには、関数が文字列を吐き出す必要があるため、文字列と整数の間の多くの変換が必要ですが、3 つの引数が必要です。変換する数値、開始基数、および終了基数。

とにかく、さまざまな数値を基数 2 から基数 10 に変換しようとしたときに得られる結果の一部を次に示します。

Number Result
11     2
100    4
101    4
110    4
111    4
1000   8
1001   8
1010   8
1011   8
1100   8

ご覧のとおり、少しパターンが浮かび上がりました。最初の数字を基数 10 に変換するだけで、残りは無視します。なぜこれが起こっているのかよくわかりません。これを行っているコードは次のとおりです。

char* baseConversion(int number, int inBase, int toBase)
{
    char tempString[20];

    if(number==0)
    {
        tempString[0] = 0;
        return tempString;
    }

    if(toBase == 10)
    {
        sprintf(tempString, "%d", number);
        char tempString2[] = {tempString[0]};
        int tempNumber = (atoi(tempString2)*((int)pow((float)inBase,(float)strlen(tempString)-1.0))+atoi(baseConversion(atoi(tempString+1), inBase, 10)));
        sprintf(tempString, "%d", tempNumber);
        return tempString;
    }
}

私のアルゴリズムに何か問題があるのか​​もしれませんが、紙の上で試してみたところ、うまくいくようです。ありがとう。

4

0 に答える 0