问题描述:给定十进制数(非负的实数)的字符串表示与转换的进制,转换的精度,要求输出转换后的进制数的字符表示
代码:
char unsignedToChar(unsigned n)
{
char ch = '#';
if (0 <= n && n <= 9)
ch = '0' + n;
else
if (10 <= n && n <= 36)
ch = n - 10 + 'A';
return ch;
}
unsigned charToUnsigned(char ch)
{
unsigned n = 0;
if ('0' <= ch && ch <= '9')
n = ch - '0';
else
if ('A' <= ch && ch <= 'Z')
n = ch - 'A' + 10;
return n;
}
std::string decimalTo(const std::string &decimal, unsigned digit, unsigned accuracy)
{
unsigned accuracyCopy = accuracy;
std::stringstream strToDecimal(decimal);
std::stack<char> bInt;
std::string decNumStr;
unsigned integer;
double decNum, decimalPlace;
const unsigned digitNum = digit;
/* 字符串流将十进制字符串表示转换为double类型 */
strToDecimal >> decNum;
/* 获取十进制数的整数与小数部分 */
integer = static_cast<unsigned>(decNum / 1);
decimalPlace = decNum - integer;
/* 十进制整数部分转换为二进制 */
while (integer)
{
bInt.push(unsignedToChar(integer % digitNum));
integer /= digitNum;
}
while (!bInt.empty())
{
decNumStr.push_back(bInt.top());
bInt.pop();
}
/* 十进制小数部分转换为二进制 */
if (accuracyCopy != 0)
decNumStr.push_back('.');
while (decimalPlace && accuracyCopy != 0)
{
--accuracyCopy;
decimalPlace *= digitNum;
decNumStr.push_back(unsignedToChar(static_cast<char>(decimalPlace / 1)));
decimalPlace -= static_cast<int>(decimalPlace) / 1;
}
while (accuracyCopy != 0)
{
--accuracyCopy;
decNumStr.push_back(unsignedToChar(0));
}
return decNumStr;
}</span>