[英]Where is the error in my function for derivative of polynomial using Horner's method?
[英]Converting numbers by Euclidean algorithm and the Horner's method
我在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编译器。 我也在尝试实现Horner方法,并且得到与以上相同的结果( )我的Horner方法代码。
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;
}
问候Ha
您的问题是关于*resultString
; 您应该将精度放在resultString [idx]中,其中idx是下一个索引,但是您所做的只是将值添加到第0个字符,因为* resultString指向该字符;
这样做:
char * resultString = createBuffer(number, base, precision);
很好
但
*resultString += converIntToChar(numbDiv);
是荒谬的
声明一个索引变量;
char * resultString = createBuffer(number, base, precision);
size_t idx = 0;
现在稍后:
resultString[idx++] = convertIntToChar(numbDiv);
并且在你的while(); 环:
*resultString += ","; /* ??? */
变成
resultString[idx++] = ','; /* note single character quotes */
对* resultString的其他实例进行类似处理;
一旦函数将要返回(即resultString准备就绪),您仍然需要终止NULL字符:
resultString[idx++] = 0;
return;
这也意味着您的createBuffer应该返回最后占C字符串NULL字符的内存。
*resultString += some char
不会将字符与字符串连接(如您期望的那样),而是将some char
的整数值添加到resultString
的第一个字符。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.