栈-10进制任意转换
设计思路
例如讲10进制转换为2进制计算思路为:
利用循环将每一个余数都压入栈中,再遍历出栈
转换代码:
/*
进制转换
*/
scStack *sysConvert(int num,int system,scStack *sys){
while(num > 0){
syS = push(syS,num % system);
num /= system;
}
return syS; //返回栈顶
}
如果10进制转换成16进制则10->a \ 11->b \ 12->c \ 13->d \ 14->e \ 15->f
则在出栈的时候判断一下是否为大于等于10的数
/*
余数出栈
*/
void pop(scStack *stack){
while(stack){
scStack *top = stack;
top->elem >= 10 ? printf("%c",top->elem + 'a' - 10) : printf("%d",top->elem);
stack = stack->next;
free(top);
}
cout<<endl<<"转换完毕!"<<endl;
}
运行结果
10->2
10->16
代码如下
#include <iostream>
#include <malloc.h>
using namespace std;
/**** 结 构 体 声 明 ****/
typedef struct scStack{
struct scStack *next;
int elem;
}scStack;
/**** 函 数 声 明 ****/
//进制转换函数,num为10进制数,system为转换目标进制,sys为栈空间
scStack *sysConvert(int num,int system,scStack *sys);
scStack *push(scStack *stack,int elem); //入栈
void pop(scStack *stack); //出栈
/*
进制转换
*/
scStack *sysConvert(int num,int system,scStack *sys){
while(num > 0){
syS = push(syS,num % system);
num /= system;
}
return syS; //返回栈顶
}
/*
余数入栈
*/
scStack *push(scStack *stack,int elem){
scStack *newStack = (scStack *)malloc(sizeof(scStack));
newStack->elem = elem;
newStack->next = stack;
stack = newStack;
return stack;
}
/*
余数出栈
*/
void pop(scStack *stack){
while(stack){
scStack *top = stack;
top->elem >= 10 ? printf("%c",top->elem + 'a' - 10) : printf("%d",top->elem);
stack = stack->next;
free(top);
}
cout<<endl<<"转换完毕!"<<endl;
}
/*
主函数
*/
int main(){
scStack *stack = NULL; //初始化栈
int num,system;
cout<<"请输入一个10进制数:";
cin>>num;
cout<<"请输入想要转换为多少进制:";
cin>>system;
stack = sysConvert(num,system,stack);
pop(stack);
return 0;
}