算法——数值转换

#include<stdio.h>

#include"stdlib.h"

#define STACK_INIT_SIZE 100

#define STACKINCREMENT 10

typedef struct {

int *base;

int *top;

int stacksize;

}Sqstack;

Sqstack s;

void Initstack();

void conversion(int a,int b);

void choice()

{

printf("1:Decimal to binary");printf("/n");

printf("2:Decimal to Octal");printf("/n");

printf("3:Decimal to Hexacimal");printf("/n");

printf("4:exit!");printf("/n");

 

}

void main()

{

int num,b;

int q;

Initstack();

choice();

scanf("%d",&b);

switch(b){

case 1:q=2;break;

case 2:q=8;break;

case 3:q=16;break;

case 4:exit(1);break;

default:printf("your choice is no effact!");break;

}

//printf("%d,",q);

printf("plses put in a Decimal number");

scanf("%d",&num);

conversion(num,q);

}

void Initstack(){

//printf("hello I'm here !");

s.base=(int*)malloc(STACK_INIT_SIZE*sizeof(int));

if(!s.base){

printf("error");

exit(1);

}

s.top=s.base;

s.stacksize=STACK_INIT_SIZE;

//printf("daoci");

}

void pushstack(int e){

//printf("I am in the pushstack !");

if(s.top-s.base>=s.stacksize){

s.base=(int*)realloc(s.base,(s.stacksize*STACKINCREMENT)*sizeof(int));

if(!s.base)  exit(2);

s.top=s.base+s.stacksize;

s.stacksize+=STACKINCREMENT;

}

*s.top++=e;

//printf("push%d,",e);

}

int popstack(){

int e;

e=*--s.top;

//printf("%d",e);

return e;

 

}

void conversion (int num ,int n){

int a;

int p;

 

if(num==0){

printf("%d",num);exit(1);

}

a=num;

while(a){

int m;

m=a%n;

a=a/n;

//printf("%dand%d,",m,a);

pushstack(m);

}

while(!(s.top==s.base)){

p=popstack();

 

if(p>=10)

printf("%c",p+55);

else

printf("%d",p);

}

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值