c语言编程题:从键盘输入一个十进制数,将其转换为二进制、八进制和十六进制数,并同时输出。

2024年11月15日 21:47
有4个网友回答
网友(1):

/*这题非常简单,你要学过数据结构就非常容易*/
/*我用个栈来帮你做*/
/*此栈数据项为整型,只定义初始化栈,入栈,出栈操作,输出栈中元素操作*/

#include
#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);
cout< }
cout<}

//应用程序
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);
}

void main()//这用来测试func
{
int n=12,m=2;
func(n,m);
m=8;
func(n,m);
m=16;
func(n,m);
}

//已在vc2005中测试过,可用,至于16进制时怎么输出A,B,..,F,吃过饭我再来贴

网友(2):

#include
void showbit(int n)
{
if(n>1){
showbit(n/2);
printf(" ");
}
printf("%d",n%2);
}
void showoct(int n)
{
if(n>7){
showoct(n/8);
printf(" ");
}
printf("%d",n%8);
}
void showhex(int n)
{
if(n>15){
showhex(n/16);
printf(" ");
}
printf("%d",n%16);
}
int main()
{
int a;
printf("input a num:");
scanf("%d",&a);
showbit(a);
printf("\n");
showoct(a);
printf("\n");
showhex(a);
printf("\n");
}

网友(3):

输八进制与十六进制用printf("%x %o",a,a);就可以了

网友(4):

//---------------------------------------------------------------------------

#include
#include

void showbit(int a)
{
unsigned mark=1<<((CHAR_BIT)*sizeof(int)-1);
int flag=0;

do {
if (!flag&&mark&a) flag=1;
if (flag) putchar(a&mark?'1':'0');
mark>>=1;
}while (mark);

}
int main(void)
{
int n;
printf("n=");
scanf("%d",&n);
printf("BIN:");
showbit(n);
printf("\nHEX:0x%X\nOCT:%o\n",n,n);

return 0;
}
//---------------------------------------------------------------------------