给定一个十进制整数X和要转换的进制m,编程将X以m进制形式输出?
m=2,8,16;
解答:
思想:由一个十进制整数到转换后m进制的整数,计算机是不知道,但是我们知道,我们告诉计算机如何去做,计算机把结果告诉我。
首先,你得要知道如何转换进制,举个例子:将10(十进制)转换二进制数
得出的二进制数为1010
其他进制也是一样求法;
每次除后得到余数按顺序写出,它不是要求的结果,而是倒过来的要求的结果。如求出是1234,但是结果是4321;这时就在想如何解决这个问题呢?这时我们就想到栈这个数据结构。如果我们把数据入栈,然后在出栈,不就我们的结果吗;
#include<stdio.h>
#define MAXSIZE 100
typedef struct
{
int* top;
int* base;
int stacksize;
}SqStack;
void JingZhiZhuanHuan(SqStack *S,int data,int m);
void DaYingShuJu(SqStack *S);
int main(void)
{
int data;
int m;
SqStack S;
S.base=(int*)malloc(MAXSIZE*sizeof(int));
S.top=S.base;
scanf("%d%d",&data,&m); //输入要转化的数据和输入要转化的进制
JingZhiZhuanHuan(&S,data,m); //转化作用,并且将转化的数据放入栈中
DaYingShuJu(&S); //打印栈的数据
return 0;
}
void JingZhiZhuanHuan(SqStack *S,int data,int m) //转化数据函数
{
int b;
while(data!=0)
{
b=data%m;
data=data/m;
*S->top=b;
S->top++;
}
}
void DaYingShuJu(SqStack *S) //打印数据函数
{
do
{
S->top--;
if(*S->top==10)
{
printf("A");
}
else if(*S->top==11)
{
printf("B");
}
else if(*S->top==12)
{
printf("C");
}
else if(*S->top==13)
{
printf("D");
}
else if(*S->top==14)
{
printf("E");
}
else if(*S->top==15)
{
printf("F");
}
else
{
printf("%d",*S->top);
}
}while(S->top!=S->base);
}
主函数:
要转换函数,将十进制数转换过程中数据放入栈中。
要打印函数,将栈中数据出栈,但是对于16进制要注意一下,举个例子:假如余数为13呢,你不能输出13吧,所以对于数据要判断一下;用一个循环完成。
总结:
主要用了栈这种数据结构的性质。来完成,我当时在想16进制时数据类型不一样(如有1或B),那么有数据不一样的栈吗?后来,想了一下,在打印函数时在判断中修改一下就行了?如果我那样想不就很麻烦吗?