進(jìn)制轉(zhuǎn)換代碼練習(xí)(支持長(zhǎng)二進(jìn)制)

進(jìn)制轉(zhuǎn)換代碼(支持長(zhǎng)二進(jìn)制):

Blist.h

Blist.h
#pragma once

#define ok 1
#define error 0
#define true 1
#define false 0
#define overflow -2
#define MAXSIZE 100

typedef int Status;

typedef struct BNode {
    int data;
    struct BNode *pre, *next;
}BNode,*Position;

typedef struct {
    BNode *head;
    BNode *tail;
}Blist;


建立鏈表函數(shù):

#include "Blist.h"
#include <stdio.h>

Status InitBlist(Blist &BL) {//建立雙鏈表
    BNode *p, *q;
    p = (BNode *)malloc(sizeof(BNode));
    if (!p) exit(overflow);
    p->data = NULL;
    q = (BNode *)malloc(sizeof(BNode));
    if (!q) exit(overflow);
    q->data = NULL;
    p->next = p->pre = q;
    q->next = q->pre = p;
    BL.head = p; BL.tail = q;
    return ok;
}

Status AddElem(Blist &BL, long e) {//插入e到雙鏈表中
    BNode *p;
    p = (BNode *)malloc(sizeof(BNode));
    if (!p) exit(overflow);
    p->data = e;
    p->next = BL.head->next; BL.head->next = p;//頭尾鏈接
    p->pre = p->next->pre; p->next->pre = p;
}

void PrtBlist(Blist BL, char p) {//打印雙鏈表
    Position q;
    switch (p) {//通過(guò)p判斷從頭打印還是從尾打印
    case 'H': {//從頭
        q = BL.head->next;
        while (q->next != BL.head) {//
            printf("%ld", q->data);
            q = q->next;
        }//
        break;
    }//
    case 'T': {//從尾
        q = BL.tail->pre;
        while (q->pre != BL.tail) {//
            printf("%d", q->data);
            q = q->pre;
        }//
    }//
    }//
}//

主區(qū):

#include <stdio.h>
#include <math.h>
#include "Blist.h"

//-------函數(shù)聲明
long BtoD(long);
long DtoB(long);
long Len(long);

//--------外部函數(shù)聲明
extern Status InitBlist(Blist &BL);
extern Status AddElem(Blist &BL, long e);
extern void PrtBlist(Blist BL, char p);


//-----------主函數(shù)
int main() {
    long B;
    char J;
    long (*p)(long);//函數(shù)指針
    scanf("%c%ld", &J,&B);
    switch (J) {
    case'B':p = BtoD; printf("%ld", (*p)(B));  break;
    case'D':p = DtoB;  (*p)(B); break;
    }
    
    return 0;
}

//-----------函數(shù)定義
long DtoB(long a) {//十進(jìn)制轉(zhuǎn)二進(jìn)制
    Blist BL;
    int i;
    long r=a,p,H=0;
    InitBlist(BL);
    for (i = 0; r != 0; i++) {
        p = r % 2;//先求余
        r = r/2;//再求整除
        //H += p * pow(10, i);//相加
        AddElem(BL, p);
    }
    PrtBlist(BL,'H');
    return ok;
}

long BtoD(long D) {//二進(jìn)制轉(zhuǎn)十進(jìn)制
    int i,H=0,r=D;
    int le,p;
    le = Len(D);
    for (i = le; i >= 0; i--) {
        p = r / pow(10, i-1);//求位次上的數(shù),如1234的1
        r = r - p*pow(10, i - 1);//求退一位的余,如從1234求得234
        H += p * pow(2,i-1);
    }
    return H;
}

long Len(long NUM) {
    int i=0;
    do{
        NUM = NUM / 10;
        i++;
    } while (NUM!=0);
    return i;
}
/*心得:
1.可以通過(guò)注釋標(biāo)記判斷括號(hào)匹配情況;
2.加入雙鏈接結(jié)構(gòu)使程序復(fù)雜,但是能夠輸出長(zhǎng)二進(jìn)制
*/
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1.ios高性能編程 (1).內(nèi)層 最小的內(nèi)層平均值和峰值(2).耗電量 高效的算法和數(shù)據(jù)結(jié)構(gòu)(3).初始化時(shí)...
    歐辰_OSR閱讀 30,217評(píng)論 8 265
  • 夜深了, 夜已入眠, 晚風(fēng)從枕邊走開(kāi), 悠悠地躍上窗臺(tái)。
    方潭閱讀 417評(píng)論 0 2
  • 一棵站在風(fēng)中的樹(shù) 無(wú)悲無(wú)喜無(wú)怨 那應(yīng)該是一棵泡桐吧 每個(gè)枝椏點(diǎn)著一個(gè)花苞 朝著天空的方向待放 像那禮花 向天空和白...
    妮可米唯閱讀 297評(píng)論 0 1
  • 兩耳不充雞言碎語(yǔ) 張嘴不談閑言妄語(yǔ) 拍拍照片讀讀書(shū) 我眼中的萬(wàn)物已是不同 敷衍浮躁世間本是虛無(wú) 隨它去讓它滾 你不...
    周喜閱讀 273評(píng)論 0 0
  • 那是我高三零診,結(jié)束后的某一天。天氣非常的熱。班上,同學(xué)依舊鬧哄哄的 我想逃開(kāi) 周圍的人群像潮水一樣,一浪接著一浪...
    張勉閱讀 232評(píng)論 0 0

友情鏈接更多精彩內(nèi)容