1. 程式人生 > >C++利用棧進行十進位制與二進位制的轉換

C++利用棧進行十進位制與二進位制的轉換

博主這個學期剛學習了資料結構,然後你懂得老師們就開始愉快的出難題,好吧不該說老師的壞話,那個題目如下:

在日常生活中我們所見到的數大都為十進位制數,但是在計算機中,所有的數字都會被轉化為二進位制數進行儲存,為了減輕計算機的壓力,現在需要我們編寫一個計算機程式對我們輸入的十進位制數轉換為二進位制數(十進位制數包括小數)。

輸入:

輸入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; 

博主完整的擼完這段程式碼整個人都不好了,有問題在評論區評論吧

相關推薦

C++利用進行十進位制二進位制轉換

博主這個學期剛學習了資料結構,然後你懂得老師們就開始愉快的出難題,好吧不該說老師的壞話,那個題目如下: 在日常生活中我們所見到的數大都為十進位制數,但是在計算機中,所有的數字都會被轉化為二進位制數進行

用鏈實現十進位制二進位制轉換

#include <iostream> using namespace std; typedef struct Stack{ int data; int length; Stack *next; } StackNode, *LinkStack; bool StackInit

IP地址點分十進位制二進位制整數之間的轉換

error C4996: 'inet_addr': Use inet_pton() or InetPton() instead or define _WINSOCK_DEPRECATED_NO_WARNINGS to disable deprecated API warnin

java 中 十進位制二進位制的互相轉換

/** * @Description: 十進位制轉換成二進位制 () * @param decimalSource * @return String */ public static String decimalToBinary(i

使用python進行漢字二進位制之間的轉換

背景:最近有人給我一大堆二進位制,看的我眼花繚亂,最後得知這是漢字的編碼,那肯定要轉成漢字呀,當然不排除有標點、特殊符號、英文大小寫字母等,但這些都比較簡單,主要是漢字與二進位制的轉換稍微麻煩一點。最後簡單的實現了將二進位制轉換成漢子的小程式,同時將漢字轉換成二進位制也是及

利用BeanMap進行物件Map的相互轉換

javabean與map的轉換有很多種方式,比如: 1、通過ObjectMapper先將bean轉換為json,再將json轉換為map,但是這種方法比較繞,且效率很低,經測試,迴圈轉換10000個bean,就需要12秒!!!不推薦使用 2、通過java反射,獲取bean類

十進位制二進位制相互轉換(包括帶小數點.各類進位制轉換公式)

首先從進位制,來討論 十進位制 0-1-2-3-4-5-6-7-8-9 例如: 365.32(十進位制) 小數點左等於   3*10^2+6*10^1+5*10^0 右邊等於  

實現十進位制二進位制轉換

/* 棧,先進後出 */ #include<stdio.h> #include<malloc.h> #define N 1 //初始化記憶體大小,以元素為單位 #define M 1 //記憶體擴增,以元素為單位 struct stac

第十二週 OJ總結--利用引數巨集進行角度弧度轉換

Copyright (c) 2016, 煙臺大學計算機與控制學院 All ringts reserved.  檔名稱:OJ總結<6>-利用引數巨集進行角度與弧度轉換 作 者:王興振 完成日期:2016年11月18日 版 本 號:未知 題目描述:  定義引數巨集A

C語言利用實現將中綴表示式轉換為字尾表示式(即逆波蘭式)

輸入計算表示式如:(1-3)*4+10/5 輸出的逆波蘭式:1  3  -  4  * 10  5  /   + 碼程式碼時臉上洋溢著的神祕的微笑 #include <stdio.h> #include <stdlib.h> #include

C++利用openssl進行公鑰解密

asi ansi printf hpa ctr const sco decrypt stdlib.h 私鑰加密的部分內容,需要用公鑰解密下面的實例代碼,由於私鑰加密後的字符串有不可打印字符,所以程序裏面進行了base64,要用的時候先解dec base64 再傳遞給函數 進

C++遞迴實現十進位制二進位制、八進位制、十六進位制

1.轉二進位制與八進位制分析 我們最熟悉不過的就是短除法將十進位制轉二進位制,將餘數倒著輸出便是該是十進位制的二進位制數,那麼很容易想到拿十進位制數n%2(或者8)這樣可以得到最高位的二進位制(八

C#利用HttpWebRequest進行post請求的示例(HTTPS)

程式碼如下: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net.Security; using System.Sec

C++中結構建立操作詳細解析

什麼是棧結構 棧結構是從資料的運算來分類的,也就是說棧結構具有特殊的運算規則,即:後進先出。 我們可以把棧理解成一個大倉庫,放在倉庫門口(棧頂)的貨物會優先被取出,然後再取出裡面的貨物。 而從資料的邏輯結構來看,棧結構起始就是一種線性結構。 如果從資料的儲存結構來進一步劃分

C# 利用 OpenCV 進行視訊捕獲 (筆記)

簡介 這個專案是關於如何從網路攝像頭或者視訊檔案(*.AVI)中捕獲視訊的,這個專案是用C#和OPENCV編寫的。 這將有助於那些喜歡C#和OpenCV環境的人。這個程式完全基於Visual Studio 2010 version C#.NET環境。這個程式展示了怎樣用C#.NET環境的Visual Stu

java中十進位制二進位制轉換函式

十進位制轉成十六進位制:  Integer.toHexString(int i)  十進位制轉成八進位制  Integer.toOctalString(int i)  十進位制轉成二進位制  Integer.toBinaryString(int i)  十六進位制轉成十進位制  Integer.valueOf

java十進位制二進位制轉換方法

十進位制轉二進位制 1.取餘法 public static void TenToBinary(int num){ int r = num%2;//餘數 if(num >=2){ T

C++中的4個型別轉換相關的關鍵字

在C/C++語言中用 (type) value(在C++還可以採用type(value))來進行顯式型別轉換(explicit type conversion),常常又被稱為強制轉換(cast投射/鑄模)。這種轉換的正確性完全掌握在程式設計師手中,傳統上強制轉換往往被過度使

c++利用簡單實現四則中綴表示式轉字尾表示式,並算值。

      最近在學習資料結構與演算法,學到棧這裡,就基於棧實現了一個簡答四則表示式算值的程式。平時我們寫的那 種表示式就是中綴,而計算機處理中綴是不佔優勢的一般都是將中綴轉成字尾再計算值,在這裡我也利用這個思路, 將中綴表示式分為以下兩部:      A.中綴表示式轉成

淺談C語言中文字檔案二進位制檔案

C語言中,按檔案中的資料組織形式來分,資料檔案可分為ASCII碼檔案(即文字檔案)和二進位制檔案。 文字檔案在磁碟中存放時每個字元對應一個位元組,用於存放對應的ASCII碼。 二進位制檔案把資料按其在記憶體中的儲存形式存放在磁碟上,一個位元組並不一定對應一個字元。 對於A