當前位置:首頁 » 編程語言 » 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」圖標。