基本上我有一个方法可以将十进制数转换为不同基数(例如,基数2)中的数字,数组中位置0的元素是最重要的,前100美元,1是最重要的。
如果我输入一个应该输出AC的字符串,我得到CA(Dec到十六进制)。如何在C中反转此char数组?
char* decimalToRadixN(int decimalNumber, int radixN, char result[]){
/*
If its below base 10, its going to be a digit convertsion (ex to binary)
If it's above base 10, we need to call a method to convert the char to a symbol.
*/
//char swap[] = result[];
int count = 0;
while(decimalNumber>0)
{
int remain = decimalNumber % radixN;
result[count] = decimalToSymbol(remain);
decimalNumber = decimalNumber / radixN;
count++;
}
/*
for(int i = 0; i < count; i++)
{
reverse the array
}
*/
return result;
}
答案 0 :(得分:2)
int i, j;
for( i = 0, j = count - 1; i < j; i++, j-- )
{
char temp = result[ i ];
result[ i ] = result[ j ];
result[ j ] = temp;
}
result[ count ] = '\0';
答案 1 :(得分:0)
问题的答案不完全是答案,但为什么不首先以正确的顺序写数字?
毫无疑问,你不知道你需要多少位数,因此从哪里开始写作。
这可以通过将数字的对数记录到基数的基数来完成。这可以使用logarithms的规则来完成。
int numDigitsForRadix(double decimalNumber, double radixN)
{
double numDigits = log(decimalNumber)/ log(radixN);
int intDigits = (int)numDigits + 1;
return intDigits;
}
[另请注意,您的'decimalNumber'绝不是真正的小数。它是C int
,真的是二进制的。这只是命名,并没有区别。它显示为printf()
的基数10是printf()
的解释,而不是数字本身。]
现在您拥有给定基数中的位数,只需写入该数字并递减而不是递增。
此外,如果您传入可用的结果长度,您可以预先根据可用长度验证所需的长度并返回错误代码(例如NULL
),如果是的话。
并且不要忘记null终止,或以其他方式提供对返回书写字符串长度的支持。