当前位置:首页 » 编程语言 » c语言栈转换十进制
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言栈转换十进制

发布时间: 2022-05-16 00:15:44

A. 用c语言栈实现进制转换,十进制转成2,8,16,2,8,16转成十进制,

Problem Description
输入一个十进制数N,将它转换成R进制数输出。
Input
输入数据包含多个测试实例,每个测试实例包含两个整数N(32位整数)和R(2<=R<=16, R<>10)。
Output
为每个测试实例输出转换后的数,每个输出占一行。如果R大于10,则对应的数字规则参考16进制(比如,10用A表示,等等)。
Sample Input
7 2
23 12
-4 3
Sample Output
111
1B
-11

#include<stdio.h>
#include<string.h>
int main()
{
int R,a,i;
long n;
char b[10000];
while(scanf("%d %d",&n,&R)!=EOF)
{
if(n==0)
printf("0\n");
if(n==1)
printf("1\n");
if(n==-1)
printf("-1\n");
if(n>1||n<-1)
{
if(n<0)
printf("-");
n=n>0?n:-n;
i=0;
while(n>0)
{
a=n%R;
n=n/R;
if(a>=10)
b[i]='A'+a-10;
else
b[i]='0'+a;
i++;
}
b[i]='\0';
for(i=strlen(b)-1;i>=0;i--)
printf("%c",b[i]);
printf("\n");
}
}
return 0;
}

B. C语言 利用栈实现不同进制数之间的转换。要求输入一个十进制整数N,通过堆栈实现十进制整数到二进制数

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

#defineelemTypeint /*链栈元素数据类型*/
#defineSNODE_SIZEsizeof(structsNode) /*链栈结点空间大小*/

#definestatusint /*状态型变量*/
#defineOVERFLOW-1 /*内存溢出状态码*/
#defineERROR0 /*错误状态码*/
#defineOK1 /*正确状态码*/

/*链栈结点存储结构*/
typedefstructsNode{
elemTypedata;
structsNode*next;
}sNode,*sNodePtr;

/*链栈存储结构*/
typedefstructlinkStack{
sNodePtrtop;/*栈顶指针*/
}linkStack;

/*初始化*/
/*操作结果:构造一个带头结点的空链栈S*/
voidinitStack(linkStack*S){
S->top=(sNodePtr)malloc(SNODE_SIZE);/*产生头结点,栈顶指针指向此头结点*/
if(!S->top)/*内存分配失败*/
exit(OVERFLOW);
S->top->next=NULL;
}

/*销毁*/
/*初始条件:链栈S已存在。操作结果:销毁链栈S*/
voiddestroyStack(linkStack*S){
sNodePtrp,q;

p=S->top;/*p指向S的头结点*/
while(p){
q=p->next;/*q指向p的下一个结点*/
free(p);/*回收p指向的结点*/
p=q;/*p移动到下一个结点*/
}/*直到没有下一个结点*/
}

/*判断链栈是否为空*/
/*初始条件:链栈S已存在。操作结果:若S为空链栈,则返回TRUE,否则返回FALSE*/
statusstackIsEmpty(linkStack*S){
returnS->top->next==NULL;
}

/*入栈*/
/*操作结果:在S的栈顶插入新的元素e*/
statuspush(linkStack*S,elemTypee){
sNodePtrp;

p=(sNodePtr)malloc(SNODE_SIZE);/*产生新结点*/
if(!p)/*内存分配失败*/
exit(OVERFLOW);

p->data=e;
p->next=S->top->next;/*将新结点链接到原栈顶*/
S->top->next=p;/*栈顶指向新结点*/
}

/*出栈*/
/*操作结果:删除S的栈顶元素,并由e返回其值*/
statuspop(linkStack*S,elemType*e){
sNodePtrp;

if(stackIsEmpty(S))
returnERROR;

p=S->top->next;/*p指向链栈的第一个结点*/
*e=p->data;/*取出数据*/
S->top->next=p->next;
free(p);/*删除该结点*/

if(S->top==p)/*栈为空*/
S->top->next=NULL;

returnOK;
}

intmain(void){
linkStackS;
elemTypee;
intN;

initStack(&S);

scanf("%d",&N);

/*除基数取余*/
while(N){
push(&S,N%2);
N/=2;
}

while(!stackIsEmpty(&S)){
pop(&S,&e);
printf("%d",e);
}

destroyStack(&S);

getch();/*屏幕暂留*/
return0;
}

如有问题,点击头像联系我

C. C语言进制转换

支持zpfloveyfy的分析,程序风格也很好。
我在这给个数制转换的公式:
十进制数N和其他d进制数的转换基于以下公式:
N
=
(N
div
d)
*
d
+
N
mod
d;
其中:div为整除,mod为求余。
例如将10进制1348转化成2504,运算过程如下:
N
Ndiv8
Nmod8
1348
168
4
168
21
0
21
2
5
2
0
2
看起来有点乱,因为这里会把原来的格式给打乱。
由最后一列4052可以看出,正好是结果2504的倒数,所以用栈来实现它是最理想不过的了。

D. C语言 栈的应用 数制转换

#include "stdafx.h"
#include <iostream.h>
#include <stdio.h>
#define MaxSize 100

//用栈的方法
typedef struct {
int data[MaxSize];
int top;
}Stack;//顺序栈,也可用链栈

void InitStack(Stack &S)//初始化栈
{
S.top=-1;
}

int push(Stack &S,int x)//入栈
{
if(S.top==MaxSize)
return 0; //栈满
else{
S.top++;
S.data[S.top]=x;
return 1;
}
}

int pop(Stack &S,int &x)//出栈
{
if(S.top==-1)
return 0; //栈空
else{
x=S.data[S.top];
S.top--;
return 1;
}
}

void display(Stack &S)
{
int x;
while(S.top!=-1)
{
pop(S,x);
printf("%x",x);
}

}
void func(int n,int m)//n为十进制数,m为2,8,或16
{
Stack S;
InitStack(S);
while(n!=0)
{
push(S,n%m);
n=n/m;
}
display(S);
}

int main(int argc, char* argv[])
{
int n;
printf("\n请输入一个数:");
scanf("%d",&n);
int m=2;
func(n,m);
m=8;
func(n,m);
m=16;
func(n,m);
return 0;
}

E. 数据结构 栈 进制转换,用C语言描述

#include<stdio.h>
#include<stdlib.h>
#defineOK1
#defineERROR-1
#defineOVERFLOW-2
#defineSTACK_INIT_SIZE50
#defineSTACKINCREMENT10


typedefintSElemType;
typedefintStatus;
typedefstruct{
SElemType*base;
SElemType*top;
intstacksize;
}SqStack;

StatusInitStack(SqStack&S)
{//构建一个空栈
S.base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType));
if(!S.base)exit(OVERFLOW);//存储分配失败
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
returnOK;
}

StatusDestroyStack(SqStack&S)
{if(!S.base)returnERROR;//若栈未建立(尚未分配栈空间)
free(S.base);//回收栈空间
S.base=S.top=NULL;
S.stacksize=0;
returnOK;
}//DetroyStack


StatusPush(SqStack&S,chare)
{//插入元素e为新的栈顶元素
if(S.top-S.base>=S.stacksize){//栈满,追加存储空间
S.base=(SElemType*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType));
if(!S.base)returnOVERFLOW;//存储分配失败
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
}
*S.top++=e;
returnOK;
}//Push

StatusPop(SqStack&S,char&e)
{//若栈不空,则删除S的栈顶元素
//用e返回其值,并返回OK;否则返回ERROR
if(S.top==S.base)returnERROR;
e=*(--S.top);
returnOK;
}//Pop

Statustwo()
{SElemTypen;chare;
SqStackS;
InitStack(S);//建空栈
printf("请输入一个十进制正整数: ");//该函数未检查是否为正数和整数
scanf("%d",&n);
printf("的2进制是:");
while(n)
{
Push(S,n%2);//N/2余数进栈
n=n/2;//整除运算
}
while(S.top!=S.base){
Pop(S,e);
printf("%d",e);
}
printf(" ");
DestroyStack(S);
}

Statuseight()
{SElemTypen;chare;
SqStackS;
InitStack(S);//建空栈
printf("请输入一个十进制正整数: ");
scanf("%d",&n);
printf("的8进制是:");
while(n)
{
Push(S,n%8);//N/8余数进栈
n=n/8;//整除运算
}
while(S.top!=S.base){
Pop(S,e);
printf("%d",e);
}
printf(" ");
DestroyStack(S);
}

Statussixteen()
{SElemTypen;chare;
SqStackS;
InitStack(S);//建空栈
printf("请输入一个十进制正整数: ");
scanf("%d",&n);
printf("的16进制是:");
while(n)
{e=n%16;
If(e==0)e='0';
if(e==1)e='1';
if(e==2)e='2';
if(e==3)e='3';
if(e==4)e='4';
if(e==5)e='5';
if(e==6)e='6';
if(e==7)e='7';
if(e==8)e='8';
if(e==9)e='9';
if(e==10)e='A';
if(e==11)e='B';
if(e==12)e='C';
if(e==13)e='D';
if(e==14)e='E';
if(e==15)e='F';
Push(S,e);//N/16余数进栈
n=n/16;//整除运算
}
while(S.top!=S.base){
Pop(S,e);
printf("%s",&e);
}
printf(" ");
DestroyStack(S);
}

intmain()
{intflag;
intselect;
printf("主菜单 ");
printf("1.2进制 ");
printf("2.8进制 ");
printf("3.16进制 ");
printf("4.退出 ");

while(flag)
{printf("请选择:");
scanf("%d",&select);
switch(select)
{
case1:
two();
break;

case2:
eight();
break;

case3:
sixteen();
break;

case4:
flag=0;
break;
}

}
}

F. C语言中的栈实现进制转换

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

#define MAXSIZE 100

typedef int DataType;
typedef struct{
DataType data[MAXSIZE];
int top;
}SeqStack,*PSeqStack;

PSeqStack Init_SeqStack(void)
{
PSeqStack S;
S=(PSeqStack)malloc(sizeof(SeqStack));
if(S)
S->top=-1;
return S;
}

int Push_SeqStack(PSeqStack S,DataType x)
{
if (S->top==MAXSIZE-1)
return 0;
else
{
S->top++;
S->data[S->top]=x;
return 1;
}
}

int Empty_SeqStack(PSeqStack S)
{
if(S->top==-1)
return 1;
else
return 0;
}

int Pop_SeqStack(PSeqStack S,DataType *x)
{
if(Empty_SeqStack(S))
return 0;
else
{
*x=S->data[S->top];
S->top--;
return -1;
}
}

void Destory_SeqStack(PSeqStack *S)
{
if(*S)
free(*S);
*S=NULL;
return;
}

typedef int DataType;
int conversation(int n,int r)
{
PSeqStack S;
DataType x;
if(!r)
{
printf("基数不能为0");
return(0);
}
S=Init_SeqStack();
if(!S)
{
printf("栈初始化失败");
return(0);
}
while(n)
{
Push_SeqStack(S,n%r);
n=n/r;
}
while (!Empty_SeqStack(S))
{
Pop_SeqStack(S,&x);
printf("%d",x);
}
Destory_SeqStack(&S);
return 0;
}

void main()
{
int i,a;
printf("输入要转换的进制!!\n");
scanf("%d",&a);
printf("输入要转换的数!!\n");
scanf("%d",&i);
conversation(i,a);
}

G. c语言用栈实现八进制转十进制,完整程序,求解

以下是我自己写的一个十进制数转化成任意进制数的程序,请参考:
#include<stdio.h>
#include<malloc.h>
#define
STACKSIZE
100
#define
StackIncrement
10
typedef
struct{
int
*base;
int
*top;
int
stacksize;
}SqStack;
SqStack
S;
int
w;
void
InitStack(){
S.base=(int*)malloc(STACKSIZE*sizeof(int));
if(!S.base)printf("存储空间已满\n");
else
{S.top=S.base;
S.stacksize=STACKSIZE;
}
}
void
GetTop(){
int
e;
if(S.top==S.base)printf("该栈为空\n");
else
e=*(S.top-1);
}
void
Push(int
e){
if(S.top-S.base>S.stacksize)
{
S.base=(int*)realloc(S.base,(S.stacksize+StackIncrement)*sizeof(int));
if(!S.base)printf("存储空间已满\n");
else
{S.top=S.base+S.stacksize;
S.stacksize+=StackIncrement;
}
}
else
*S.top++=e;
}
void
Pop(){
if(S.top==S.base)printf("该栈为空,不能删除\n");
w=*--S.top;
}
void
conversion()
{InitStack();
int
n,d,l;
printf("请输入一个十进制数:
");
scanf("%d",&n);
printf("\n");
printf("\n");
printf("请输入你要转化成的制数:
(小于10)
");
scanf("%d",&d);
printf("\n");
printf("\n");
printf("%d转换成%d进制的数为:",n,d);
while(n)
{Push(n%d);
n=n/d;
}
while(!(S.top==S.base)){Pop();printf("%d",w);}
printf("\n");
printf("\n================================================================================");
printf("\n

继续
请按:1\n");
printf("

退出
请按:2\n");
printf("\n================================================================================");
scanf("%d",&l);
switch(l)
{case
1
:printf("\n");conversion();break;
case
2
:break;
}
}
void
main()
{printf("********************************************************************************\n");
printf("

欢迎进入数制转换系统
☆\n");
printf("\n");
printf("
设计者:马兆瑞(信息09-2班)");
printf("********************************************************************************\n");
conversion();
}

H. 数据结构中用C语言写:利用栈实现十进制数 N和其它 d进制数的转换。

工具/材料:以Microsoft Visual Studio 2010为例。

1、首先在桌面上,点击“Microsoft Visual Studio 2010”图标。