数据结构实验 第三单元 二进制转换
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;
}
/// <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;
}
相关文章推荐
- 数据结构实验 第三单元 队列操作
- 数据结构实验 第三单元 队列操作
- 数据结构实验 第三单元 二进制转换
- 数据结构实验 第二单元 构造计算器
- 数据结构实验 第二单元 构造计算器
- 数据结构实验 第二单元 汉诺塔(非递归,用栈模拟递归)
- 数据结构实验 第二单元 汉诺塔(非递归,用栈模拟递归)
- 数据结构实验 第二单元 括号匹配
- 数据结构实验 第二单元 括号匹配
- 数据结构实验 第二单元 栈操作
- 数据结构实验 第二单元 栈操作
- 数据结构之插入排序
- <LeetCode OJ> 8. String to Integer (atoi)
- 数据结构实验之查找六:顺序查找
- <LeetCode OJ> 148. Sort List
- 学期末数据结构教程总结
- 数据结构总结
- 数据结构实践——用哈希法组织关键字
- 数据结构实践——用哈希法组织关键字
- 本学期数据结构学习总结