(进制转换)数制转换,把一个十进制的数转换为R进制
前情提要
cpp文件
对16进制转换,本文提供2种
本代码可支持,10进制转换为任意进制的数(但不支持数字转变为字母)
可以加入一些负责转换字母的函数,例如下个代码当中的mode16函数,就是负责将10、11、12、13、14、15转换为a、b、c、d、e、f的。
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define maxsize 100
typedef int status;//使后面可以使用status类型,用来表示成功或失败状态
#define ERROR -1
#define OK 1
typedef struct
{
int *base;
int *top;
int stacksize;
}sqstack;
status init(sqstack *S)
{//顺序栈的初始化
S->base=(int *)malloc(sizeof(int));
if(!S->base) exit(OVERFLOW);
S->top=S->base;
S->stacksize=maxsize;
return OK;
}
status push(sqstack *S,int e)//顺序栈入栈
{//插入元素e为新的栈顶元素
if(S->top-S->base==S->stacksize) return ERROR;
*S->top++=e; return OK;
}
char pop(sqstack *S)//顺序栈出栈
{//删除S的栈顶元素,用e返回其值
int e;
if(S->top==S->base) return ERROR;
e=*(--S->top);
return e;
}
char gettop(sqstack *S)//取栈顶元素
{//返回S的栈顶元素,不修改栈顶指针
if(S->top!=S->base)
return *(S->top-1);
}
status StackTraverse(sqstack *S)
{
// 从栈顶到栈底依次输出栈中的每个元素
if(S->top==S->base)printf("The Stack is Empty!");//判断栈是否为空
else
{
printf("The Stack is: ");
S->top--;
while(S->top>=S->base)
{
printf("%d ", *S->top);
S->top--;
}
}
printf("\n");
return OK;
}
bool empty(sqstack *s)//判断栈是否为空
{
return (s->top==s->base);//为空,返回1
}
void conversion(sqstack *s,int i)
{
int e,n;
printf("\n请输入你要转化的数据:");
scanf("%d",&n);
while(n)
{
push(s,n%i);
n=n/i;
}
while(!empty(s))
{
e=pop(s);
printf("%d",e);
}
}
int main()
{
sqstack Sta;int n;
sqstack *S=&Sta;
init(S);
printf("这里是进制转化处理程序\n");
printf("请输入你想将10进制转换为几进制?\n");
scanf("%d",&n);
printf("10进制转化为%d",n);
conversion(S,n);
return 0;
}
输出
输入
16
15362
这个代码额外加了个供16进制进制转换的函数
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define maxsize 100
typedef int status;//使后面可以使用status类型,用来表示成功或失败状态
#define ERROR -1
#define OK 1
typedef struct
{
int *base;
int *top;
int stacksize;
}sqstack;
status init(sqstack *S)
{//顺序栈的初始化
S->base=(int *)malloc(sizeof(int));
if(!S->base) exit(OVERFLOW);
S->top=S->base;
S->stacksize=maxsize;
return OK;
}
status push(sqstack *S,int e)//顺序栈入栈
{//插入元素e为新的栈顶元素
if(S->top-S->base==S->stacksize) return ERROR;
*S->top++=e; return OK;
}
char pop(sqstack *S)//顺序栈出栈
{//删除S的栈顶元素,用e返回其值
int e;
if(S->top==S->base) return ERROR;
e=*(--S->top);
return e;
}
char gettop(sqstack *S)//取栈顶元素
{//返回S的栈顶元素,不修改栈顶指针
if(S->top!=S->base)
return *(S->top-1);
}
status StackTraverse(sqstack *S)
{
// 从栈顶到栈底依次输出栈中的每个元素
if(S->top==S->base)printf("The Stack is Empty!");//判断栈是否为空
else
{
printf("The Stack is: ");
S->top--;
while(S->top>=S->base)
{
printf("%d ", *S->top);
S->top--;
}
}
printf("\n");
return OK;
}
bool empty(sqstack *s)//判断栈是否为空
{
return (s->top==s->base);//为空,返回1
}
char made16(int e)
{
char ch='a';
if(e==10)return ch;
else if(e==11) return ch+1;
else if(e==12) return ch+2;
else if(e==13) return ch+3;
else if(e==14) return ch+4;
else if(e==15) return ch+5;
}
void conversion(sqstack *s,int i)
{
int e,n;
printf("\n请输入你要转化的数据:");
scanf("%d",&n);
while(n)
{
push(s,n%i);
n=n/i;
}
while(!empty(s))
{
e=pop(s);
if(e<10)
printf("%d",e);
else printf("%c",made16(e));
}
}
int main()
{
sqstack Sta;int n;
sqstack *S=&Sta;
init(S);
printf("这里是进制转化处理程序\n");
printf("支持2-16进制的转换\n");
printf("请输入你想将10进制转换为几进制?\n");
scanf("%d",&n);
printf("10进制转化为%d",n);
conversion(S,n);putchar('\n');
return 0;
}
输出
mode16函数,转换为16进制的函数,进行了另外一种写法
char made16(int e)
{
char ch;
ch=(0<=e&&e<=9)?(char)(e+'0'):(char)(e-10+'A');
return ch;
}
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define maxsize 100
typedef int status;//使后面可以使用status类型,用来表示成功或失败状态
#define ERROR -1
#define OK 1
typedef struct
{
int *base;
int *top;
int stacksize;
}sqstack;
status init(sqstack *S)
{//顺序栈的初始化
S->base=(int *)malloc(sizeof(int));
if(!S->base) exit(OVERFLOW);
S->top=S->base;
S->stacksize=maxsize;
return OK;
}
status push(sqstack *S,int e)//顺序栈入栈
{//插入元素e为新的栈顶元素
if(S->top-S->base==S->stacksize) return ERROR;
*S->top++=e; return OK;
}
char pop(sqstack *S)//顺序栈出栈
{//删除S的栈顶元素,用e返回其值
int e;
if(S->top==S->base) return ERROR;
e=*(--S->top);
return e;
}
char gettop(sqstack *S)//取栈顶元素
{//返回S的栈顶元素,不修改栈顶指针
if(S->top!=S->base)
return *(S->top-1);
}
status StackTraverse(sqstack *S)
{
// 从栈顶到栈底依次输出栈中的每个元素
if(S->top==S->base)printf("The Stack is Empty!");//判断栈是否为空
else
{
printf("The Stack is: ");
S->top--;
while(S->top>=S->base)
{
printf("%d ", *S->top);
S->top--;
}
}
printf("\n");
return OK;
}
bool empty(sqstack *s)//判断栈是否为空
{
return (s->top==s->base);//为空,返回1
}
char made16(int e)
{
char ch;
ch=(0<=e&&e<=9)?(char)(e+'0'):(char)(e-10+'A');
return ch;
}
void conversion(sqstack *s,int i)
{
int e,n;
printf("\n请输入你要转化的数据:");
scanf("%d",&n);
while(n)
{
push(s,n%i);
n=n/i;
}
while(!empty(s))
{
e=pop(s);
if(e<10)
printf("%d",e);
else printf("%c",made16(e));
}
}
int main()
{
sqstack Sta;int n;
sqstack *S=&Sta;
init(S);
printf("这里是进制转化处理程序\n");
printf("支持2-16进制的转换\n");
printf("请输入你想将10进制转换为几进制?\n");
scanf("%d",&n);
printf("10进制转化为%d",n);
conversion(S,n);putchar('\n');
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)