两种办法实现进制转换:将十进制数N转换成为r进制数
法一:递归
//进制转换
void change1(int N,int r) {
if (N / r == 0) {
printf("%d", N%r);
}
else {
change1(N/r, r);
printf("%d", N%r);
}
}
int main() {
int N = 0;
int r = 0;
printf("请输入要进行的进制转换的十进制数:");
scanf("%d", &N);
printf("请输入要转换成几进制?");
scanf("%d", &r);
change1(N, r);
return 0;
}
ps:DEC表示10进制,OCT表示8进制,BIN表示2进制
法二:栈
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdbool.h>
#define MaxSize 20
typedef struct {
int data[MaxSize];//栈中元素
int top;//栈顶指针
}SqStack;
void InitStack(SqStack* S) {//栈初始化
(*S).top = -1;
}
bool StackEmpty(SqStack* S) {//判空
if ((*S).top == -1) {//栈中无元素
return true;
}
else {
return false;
}
}
bool Pop(SqStack* S, int* x) {//出栈
if (S->top == -1) {//栈中无元素
return false;
}
*x = S->data[S->top];
S->top--;
return true;
}
bool Push(SqStack* S, int x) {//入栈
if (S->top == MaxSize - 1) {
return false;
}
S->top++;
S->data[S->top] = x;
return true;
}
//进制转换——栈实现
void change2(int N, int r) {
int tmp = 0;
SqStack s;
InitStack(&s);
while (N>0) {
Push(&s, N % r);
N = N / r;
}
while (!StackEmpty(&s)) {
Pop(&s, &tmp);
printf("%d", tmp);
}
}
int main() {
int N = 0;
int r = 0;
printf("请输入要进行的进制转换的十进制数:");
scanf("%d", &N);
printf("请输入要转换成几进制?");
scanf("%d", &r);
change2(N, r);
return 0;
}