您的位置:首页 > 理论基础 > 数据结构算法

数据结构实验 第三单元 二进制转换

2015-12-18 12:22 323 查看
十进制 → 二进制

/// <summary>
/// 十进制转换为二进制,支持小数转换。
/// </summary>
/// <param name="strDec"></param>
/// <returns></returns>
private string DecToBin(string source)
{
int cur = 0;
LinkedStack ls = new LinkedStack();
LinkedQueue lq = new LinkedQueue();
//获取整数部分
for (cur = 0; cur < source.Length && source[cur] >= '0' && source[cur] <= '9'; cur++)
{
//整数部分入栈
ls.Push(source[cur]-'0');
}
//跳过小数点
cur++;
for (; cur < source.Length && source[cur] >= '0' && source[cur] <= '9'; cur++)
{
//小数部分入队
lq.Push(source[cur]-'0');
}
//将字符串转换为实数类型

//获取整数部分
int intInt = 0;
int fac = 1;
while (!ls.Empty())
{
intInt += fac*int.Parse(ls.Pop().ToString());
fac *= 10;
}

//获取小数部分
double dbDec = 0;
double dbFac = 0.1;
while (!lq.Empty())
{
dbDec += dbFac * int.Parse(lq.Pop().ToString());
dbFac *= 0.1;
}

//整数部分转换
while (intInt!=0)
{
ls.Push(intInt % 2);
intInt = intInt / 2;
}
if(ls.Empty())
{
ls.Push(0);
}
//小数部分是否为0
while (dbDec != (double)((int)(dbDec)))
{
//取小数部分
dbDec = dbDec - (double)((int)(dbDec));
//乘二
dbDec *= 2;
//取整
lq.Push((int)(dbDec));
}
//输出二进制

System.Text.StringBuilder sb = new StringBuilder(100);

//输出整数部分

while (!ls.Empty())
{
sb.Append(ls.Pop());
}
if (!lq.Empty())
{
sb.Append(".");
}
while (!lq.Empty())
{
sb.Append(lq.Pop());
}
return sb.ToString();
}

二进制 → 十进制

/// <summary>
/// 二进制转换为十进制,支持小数转换。
/// </summary>
/// <param name="strBin"></param>
/// <returns></returns>
private double BinToDec(string source)
{
int cur = 0;
LinkedStack ls = new LinkedStack();
LinkedQueue lq = new LinkedQueue();
//获取整数部分
for (cur = 0; cur < source.Length && source[cur] >= '0' && source[cur] <= '1'; cur++)
{
//整数部分入栈
ls.Push(source[cur] - '0');
}
//跳过小数点
cur++;
for (; cur < source.Length && source[cur] >= '0' && source[cur] <= '1'; cur++)
{
//小数部分入队
lq.Push(source[cur] - '0');
}
//
int intFac = 1;
double ans = 0;
while (!ls.Empty())
{
ans += intFac * int.Parse(ls.Pop().ToString());
intFac *= 2;
}
double dbFac = 0.5;
while (!lq.Empty())
{
ans += dbFac * int.Parse(lq.Pop().ToString());
dbFac *= 0.5;
}
return ans;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: