我在 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 为底的数字返回,即AA。但我得到的结果是�。你能帮我找出问题所在吗?另外我用的是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;
}
关于萩