gpt4 book ai didi

通过欧几里得算法和霍纳方法转换数字

转载 作者:行者123 更新时间:2023-11-30 17:51:48 24 4
gpt4 key购买 nike

我的 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;
}

问候萩市

最佳答案

您的问题是对 *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 字符的内存。

关于通过欧几里得算法和霍纳方法转换数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16509204/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com