基数 (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;
}
}
私のアルゴリズムに何か問題があるのかもしれませんが、紙の上で試してみたところ、うまくいくようです。ありがとう。