xdoj277十进制非负整数到二进制

问题描述

小王想利用栈设计程序完成数制的转换,但不知什么原因,转换总是有错。请帮他完成十进制非负整数到二进制的转换。

输入说明

输入3个十进制非负整数,每个数用空格分开。

输出说明

输出十进制数所对应的二进制数。

输入样例

例1:

3 19 256

输出样例

例1:

11 10011 100000000

提示:

转换方法:用2整除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,如此进行,直到商为0时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。

                                                                                                                                        

使用链栈操作,节省空间

入栈和出栈直接从书上扒的

#include<stdio.h>
#include<stdlib.h>

typedef struct node{
	int element;
	struct node *next;
}LinkStack;
LinkStack *Top;

//进栈
LinkStack *PushL(LinkStack *Top,int e){
	LinkStack *p;
	p=(LinkStack*)malloc(sizeof(LinkStack));
	p->element=e;
	p->next=Top;
	Top=p;
	return Top;
} 

//出栈
int *PopL(LinkStack *Top){
	int *r;
	LinkStack *p=Top;
	if(p==NULL){
		printf("Stack is underflow\n");
		return NULL;
	}
	else{
		r=(int*)malloc(sizeof(int));
		*r=p->element;
		Top=Top->next;
		printf("%d",*r);  //输出在这里
		return r;
	}
} 

//进制转换
void Trans(int ten) {
    Top = NULL;
    if(ten==0) printf("0");   //0单独考虑
	else{
		while (ten > 0) {
	        int remainder = ten % 2;
	        Top = PushL(Top, remainder);
	        ten /= 2;
	    }
	    
        //也是输出
	    while(Top != NULL) {
	    	PopL(Top);
	    	Top=Top->next;
	    }
	}	
		
    printf(" ");
}

int main(){
	Top = NULL;
	int ten1,ten2,ten3;
	scanf("%d %d %d",&ten1,&ten2,&ten3);

	Trans(ten1);
	Trans(ten2);
	Trans(ten3);

    return 0;

} 

出栈里没写free(p),因为要循环操作,不止输出栈顶元素

  • 11
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值