C のコードに問題があります。数値が正しく変換されません。これは、与えられた数値を基数の異なる別の数値に変換するユークリッド アルゴリズムです。「精度」はコンマの後の桁数です。
static char* euclid(float number, int base, int precision)
{
//create a buffer for holding the resulting string
char* resultString = createBuffer(number, base, precision);
int numbTemp;
int numbDiv;
float maxExponent = 0;
while (number >= pow((float)base, (float)maxExponent)) {
maxExponent++;
}
maxExponent--;
if (maxExponent < 0) {
maxExponent = 0;
}
while (maxExponent >= 0) {
numbDiv = number / pow(base, maxExponent);
*resultString += converIntToChar(numbDiv);
numbTemp = numbDiv * pow(base, maxExponent);
number -= numbTemp;
maxExponent--;
if(maxExponent < 0 && precision >0) {
*resultString += ",";
while(precision > 0) {
numbDiv = number / pow(base, maxExponent);
numbTemp = numbDiv * pow(base, maxExponent);
*resultString += convertIntToChar(numbDiv);
number = number - numbTemp;
maxExponent--;
precision--;
}
}
}
return resultString;
}
数値を文字に変換:
static char convertIntToChar(int number) {
if (0 <= number && 10 > number) {
return number + '0';
}
else if (16 > number) {
return number - 10 + 'A';
}
else {
return '\0';
}
}
「数値」の入力は常に 10 を底とする数値です。たとえば 170 で試してみた結果、170 (これは 10 を底とする) を 16 を底とする数値として返す必要がありました。ああ。しかし、結果として得られるのは�. 問題を見つけるのを手伝ってくれませんか。その上、私はLinuxを使用しています。だから私はgccコンパイラを使います。また、ホーナーの方法を実装しようとしていますが、上記と同じ結果が得られます (�) ホーナーの方法のコード。
static char* horner(float number, int base, int precision) {
// create a buffer for holding the resulting string.
char* resultString = createBuffer(number, base, precision);
int numbDiv = 0;
int numbTemp = 0;
int numbConv = 0;
do {
numbDiv = number / base;
numbTemp = numbDiv * base;
numbConv = number - numbTemp;
number = numbDiv;
*resultString += convertIntToChar(numbConv);
} while (number != 0);
return resultString;
}
よろしく萩