Demo entry 6644540

dd

   

Submitted by lu on Oct 04, 2017 at 09:51
Language: C++. Code size: 1.5 kB.

#include <iostream>
#include <cstdio>
#include <cmath>

#define StackSize 32


// 栈 filo  先进后出
struct Stack {
	int stka[StackSize];  // 栈数组,存储放入栈的数据
	int top;    // 栈顶,指向可插入数据位置
	int size;
}stack;

void  initCstack();  //
int  insertStack(int);
int   outStack();
void  covertDtoB(int);

int main() {
	int decimalNum = 9527;

	printf("%d\n", stack.top);
	covertDtoB(decimalNum);

	getchar();
	return 0;
}


// 初始化栈,设置大小,初始栈顶
void  initCstack() {
	stack.top = 0;
	stack.size = StackSize;
}
// 向栈插入数据
int insertStack(int a) {
	// 需判断栈是否已满
	if (stack.top >= stack.size) {
		stack.top = stack.size;
		return 0;
	}
	// 插入数据
	stack.stka[stack.top] = a;

	// 修改栈顶
	if (stack.top < stack.size) {
		stack.top++;
	}
	return 1;  // 成功返回
}
// 从栈弹出数据
int outStack() {
	// 不是空栈 才能弹出数据
	// top 为零时是没有数据的
	if (stack.top > 0) {
		stack.top--; // 移动到有数据的位置
	}
	else {
		return 0;
	};

	return stack.stka[stack.top];
}


// 十进制转二进制字符串,控制台输出
void  covertDtoB(int aDecimal) {
	int tmp = aDecimal;
	initCstack();
	while (tmp > 0)
	{
		insertStack(tmp % 2);
		tmp >>= 2;
	}

	// 前面补0
	int i = stack.top % 4; //分段隔开,这个是第一段有几个有效数字
	if (i > 0) {
		for (int j = i; j < 4; j++) { // 用零补齐4位
			printf("%d", 0);
		}
		i = 4 - i; // 已打印0的个数
	}

	// 打印二进制
	while (stack.top)
	{
		// 从堆栈弹出
		printf("%d", outStack());
		if (++i % 4 == 0) {//4个二进制数字间隔一个空格
			if (stack.top == 0) printf("B"); // 结束打印B表示二进制数
			printf(" ");
		}
	}

}

This snippet took 0.01 seconds to highlight.

Back to the Entry List or Home.

Delete this entry (admin only).