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(); 
   
//------------------------------------------------------------------------------------ 
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; 

博主完整的撸完这段代码整个人都不好了,有问题在评论区评论吧

0 0