使用栈实现十进制数转化成其他进制
2017-10-03 09:52
543 查看
//利用栈的基本操作实现将任意一个十进制整数转化为R进制整数
//算法:除d取余,倒序取余;十六进制特殊处理
//http://www.sojson.com/hexconvert.html (在线进制转化)
#include<stdio.h>
//类型定义
typedef int ElementType;
//节点
typedef struct{
ElementType data;
struct Node* next;
}Node;
//栈头
typedef struct{
struct Node* next;
}S;
//
int main()
{
//函数原型
S* stackBuild();
int isEmpty(S* stack);
void Push(S* stack,ElementType e);
ElementType Pop(S* stack);
//void printStack(S*);
//
//tip
printf("welcome to this conversion of number system...\n");
S* stack1=stackBuild();
int num;
char ans='y';
while(ans=='y'||ans=='Y')
{
printf("please input a decimal num,num=");
scanf("%d",&num);
getchar();
int R;
printf("which scale(mark it R) do you wanna ,R=");
scanf("%d",&R);
getchar();
int x,y;//余数remainder==y
x=num/R;
y=num%R;
Push(stack1,y);
while(x!=0)
{
num=x;
x=num/R;
y=num%R;
Push(stack1,y);
}
printf("after transforming,this num become>>>");
while(!(isEmpty(stack1)))
{
int out=Pop(stack1);
switch(out)
{
case 10:printf("%c",'a');break;
case 11:printf("%c",'b');break;
case 12:printf("%c",'c');break;
case 13:printf("%c",'d');break;
case 14:printf("%c",'e');break;
case 15:printf("%c",'f');break;
default:printf("%d",out);break;
}
}
printf("\n");
A1:printf("do you wanna go on...ans=");
scanf("%c",&ans);
getchar();//习惯
if(ans!='y'&&ans!='Y'&&ans!='n'&&ans!='N')
{
printf("input error!input again!\n");
goto A1;
}
if(ans=='n'||ans=='N') break;
}
//tip
printf("thank you for trying!!!\n");
getchar();
return 0;
}
//函数原型
S* stackBuild()
{
S*
p=(S*)malloc(sizeof(S));
if(p==NULL) exit(-1);
p->next=NULL;
return p;
}
int isEmpty(S* stack)//1-empty
{
return
(stack->next==NULL);
}
void Push(S* stack,ElementType e)
{
Node*
p=(Node*)malloc(sizeof(Node));
if(p==NULL)
exit(-1);
p->data=e;
p->next=NULL;
p->next=stack->next;
stack->next=p;//链接
}
ElementType Pop(S* stack)
{
//if(stack->next==NULL)
return NULL;//判空
if(isEmpty(stack))
return NULL;
Node* q=stack->next;//q-pop的节点
ElementType e=q->data;
stack->next=q->next;
free(q);
return e;
}
//
运行效果图:
//算法:除d取余,倒序取余;十六进制特殊处理
//http://www.sojson.com/hexconvert.html (在线进制转化)
#include<stdio.h>
//类型定义
typedef int ElementType;
//节点
typedef struct{
ElementType data;
struct Node* next;
}Node;
//栈头
typedef struct{
struct Node* next;
}S;
//
int main()
{
//函数原型
S* stackBuild();
int isEmpty(S* stack);
void Push(S* stack,ElementType e);
ElementType Pop(S* stack);
//void printStack(S*);
//
//tip
printf("welcome to this conversion of number system...\n");
S* stack1=stackBuild();
int num;
char ans='y';
while(ans=='y'||ans=='Y')
{
printf("please input a decimal num,num=");
scanf("%d",&num);
getchar();
int R;
printf("which scale(mark it R) do you wanna ,R=");
scanf("%d",&R);
getchar();
int x,y;//余数remainder==y
x=num/R;
y=num%R;
Push(stack1,y);
while(x!=0)
{
num=x;
x=num/R;
y=num%R;
Push(stack1,y);
}
printf("after transforming,this num become>>>");
while(!(isEmpty(stack1)))
{
int out=Pop(stack1);
switch(out)
{
case 10:printf("%c",'a');break;
case 11:printf("%c",'b');break;
case 12:printf("%c",'c');break;
case 13:printf("%c",'d');break;
case 14:printf("%c",'e');break;
case 15:printf("%c",'f');break;
default:printf("%d",out);break;
}
}
printf("\n");
A1:printf("do you wanna go on...ans=");
scanf("%c",&ans);
getchar();//习惯
if(ans!='y'&&ans!='Y'&&ans!='n'&&ans!='N')
{
printf("input error!input again!\n");
goto A1;
}
if(ans=='n'||ans=='N') break;
}
//tip
printf("thank you for trying!!!\n");
getchar();
return 0;
}
//函数原型
S* stackBuild()
{
S*
p=(S*)malloc(sizeof(S));
if(p==NULL) exit(-1);
p->next=NULL;
return p;
}
int isEmpty(S* stack)//1-empty
{
return
(stack->next==NULL);
}
void Push(S* stack,ElementType e)
{
Node*
p=(Node*)malloc(sizeof(Node));
if(p==NULL)
exit(-1);
p->data=e;
p->next=NULL;
p->next=stack->next;
stack->next=p;//链接
}
ElementType Pop(S* stack)
{
//if(stack->next==NULL)
return NULL;//判空
if(isEmpty(stack))
return NULL;
Node* q=stack->next;//q-pop的节点
ElementType e=q->data;
stack->next=q->next;
free(q);
return e;
}
//
运行效果图:
相关文章推荐
- 十进制数转化其他进制
- 用堆栈实现由十进制数向其他进制的转换
- 其他进制数到十进制数的转化
- c#如实现将一个数字转化为其他进制字符串输出
- 十进制数转化成N进制数(java实现)
- 递归函数之将十进制数转化为其他进制
- Java实现十进制数转化为7进制
- 十进制数转化为任意进制
- 用C语言代码实现n进制数转换为十进制数
- 10进制转化成其他进制
- JAVA实现10进制的数转化为任意n进制的数
- 给定一个十进制数,将其转化为N进制数-----17年滴滴笔试题
- 用C语言代码实现n进制数转换为十进制数
- 使用栈实现进制转换、括号匹配的检验、行编辑程序
- 十进制和其他进制的相互转化(自己写的)
- c++中将十进制数转换为其他进制的简便方法
- 用栈实现十进制数转化成八进制数
- 求一个数中任意的某一段,(可以转化为其他进制)
- Java之数组实现进制转化
- 利用递归实现10进制转化成任意进制