C++利用栈进行十进制与二进制的转换
来源:互联网 发布:复读好不好知乎 编辑:程序博客网 时间:2024/06/04 00:45
博主这个学期刚学习了数据结构,然后你懂得老师们就开始愉快的出难题,好吧不该说老师的坏话,那个题目如下:
在日常生活中我们所见到的数大都为十进制数,但是在计算机中,所有的数字都会被转化为二进制数进行存储,为了减轻计算机的压力,现在需要我们编写一个计算机程序对我们输入的十进制数转换为二进制数(十进制数包括小数)。
输入:
输入n个十进制数,每个数占一行,输入0 结束。(我们保证输入的合法性,可以在转换过程中不失精度。)
输出:
输出转换后的二进制数,每个输出占一行。
代码如下:
#include <iostream>
using namespace std;
struct Node//以下所有内容均为链的定义
{
int data;
Node *next;
};
class SLL
{
private:
Node *top;
public:
SLL();
void Push(int i);
int Pop();
bool IsEmpty();
void wPush(int i);
};
SLL::SLL() //构造函数
{
top=new Node;
top->next=NULL;
}
void SLL::Push(int i) //插入函数,头插法
{
Node *p;
p=new Node;
p->data=i;
p->next=top->next;
top->next=p;
}
int SLL::Pop() //删除并返回值
{
Node *p;
int x;
x=top->next->data;
p=top->next;
top->next=top->next->next;
delete p;
return x;
}
bool SLL::IsEmpty() //判断链是否为空
{
return (top->next==NULL);
}
void SLL::wPush(int i) //插入函数,尾插法
{
Node *p,*q;
p=top;
q=new Node;
while(1)
{
if(p->next==NULL)
break;
else
p=p->next;
}
q->data=i;
q->next=NULL;
p->next=q;
}
//------------------------------------------------------------------------------------
void ZB(int x) //整数部分10禁止转2进制法
{
SLL s1;
int k;
while(x!=0)
{
k=x%2;
s1.Push(k);
x=x/2;
}
while(!s1.IsEmpty())
{
cout<<s1.Pop();
}
}
using namespace std;
struct Node//以下所有内容均为链的定义
{
int data;
Node *next;
};
class SLL
{
private:
Node *top;
public:
SLL();
void Push(int i);
int Pop();
bool IsEmpty();
void wPush(int i);
};
SLL::SLL() //构造函数
{
top=new Node;
top->next=NULL;
}
void SLL::Push(int i) //插入函数,头插法
{
Node *p;
p=new Node;
p->data=i;
p->next=top->next;
top->next=p;
}
int SLL::Pop() //删除并返回值
{
Node *p;
int x;
x=top->next->data;
p=top->next;
top->next=top->next->next;
delete p;
return x;
}
bool SLL::IsEmpty() //判断链是否为空
{
return (top->next==NULL);
}
void SLL::wPush(int i) //插入函数,尾插法
{
Node *p,*q;
p=top;
q=new Node;
while(1)
{
if(p->next==NULL)
break;
else
p=p->next;
}
q->data=i;
q->next=NULL;
p->next=q;
}
//------------------------------------------------------------------------------------
void ZB(int x) //整数部分10禁止转2进制法
{
SLL s1;
int k;
while(x!=0)
{
k=x%2;
s1.Push(k);
x=x/2;
}
while(!s1.IsEmpty())
{
cout<<s1.Pop();
}
}
//------------------------------------------------------------------------------------
void XB(double x) //小数部分10进制转2进制
{
SLL s1;
int k;
while(x!=1)
{
k=x*2;
s1.wPush(k);
x=x*2;
}
while(!s1.IsEmpty())
{
cout<<s1.Pop();
}
cout<<endl;
}
void XB(double x) //小数部分10进制转2进制
{
SLL s1;
int k;
while(x!=1)
{
k=x*2;
s1.wPush(k);
x=x*2;
}
while(!s1.IsEmpty())
{
cout<<s1.Pop();
}
cout<<endl;
}
//------------------------------------------------------------------------------------
int main()
{
SLL s1;
double x;
double y;
int i;
while(cin>>x)
{
if(x==0)
break;
else
{
i=x;
y=x-i;
if(i==0)
{
cout<<"0.";
XB(y);
}
else if(y==0)
{
ZB(i);
cout<<endl;
}
else if(i!=0&&y!=0)
{
ZB(i);
cout<<".";
XB(y);
}
}
}
return 0;
}
int main()
{
SLL s1;
double x;
double y;
int i;
while(cin>>x)
{
if(x==0)
break;
else
{
i=x;
y=x-i;
if(i==0)
{
cout<<"0.";
XB(y);
}
else if(y==0)
{
ZB(i);
cout<<endl;
}
else if(i!=0&&y!=0)
{
ZB(i);
cout<<".";
XB(y);
}
}
}
return 0;
}
博主完整的撸完这段代码整个人都不好了,有问题在评论区评论吧
0 0
- C++利用栈进行十进制与二进制的转换
- 利用栈进行进制转换,二进制转换为十进制
- 二进制与十进制的转换
- 二进制与十进制的转换
- 二进制与十进制的转换
- 二进制与十进制的转换
- 二进制与十进制的转换
- 十进制与二进制的转换
- 十进制与二进制小数的相互转换C语言
- 数据结构5:利用栈实现二进制到十进制的转换
- 简单的利用栈 将二进制转换成十进制
- 利用栈实现十进制到二进制的转换输出
- C语言实现二进制与十进制转换
- 利用栈将十进制转换为二进制
- 利用栈实现二进制转换为十进制
- 二进制与十进制转换
- 二进制与十进制转换
- 二进制与十进制转换
- 栈的知识
- 待更正
- 拒绝OOM,打造自定义帧动画
- javascript 简单导航菜单设计
- setter和getter方法
- C++利用栈进行十进制与二进制的转换
- hihoCoder之hiho一下 第六十九周 解题
- linux 下C编程(七) 之 杂杂的程序
- 五子棋项目开发日志
- Linux下修改主机IP地址的三种方法
- ViewPager封装工具类: 轻松实现APP导航或APP中的广告栏
- 深入解读缓存(一)——缓存的力量
- Linux下解决Android SDK更新“ Fetching https://dl-ssl.google.com/android/repository/addons_list-2.xml ”的问题
- 算法基础总结