两种办法实现进制转换:将十进制数N转换成为r进制数

两种办法实现进制转换:将十进制数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;
}

两种办法实现进制转换:将十进制数N转换成为r进制数_第1张图片
两种办法实现进制转换:将十进制数N转换成为r进制数_第2张图片

ps:DEC表示10进制,OCT表示8进制,BIN表示2进制

两种办法实现进制转换:将十进制数N转换成为r进制数_第3张图片

法二:栈

#define _CRT_SECURE_NO_WARNINGS
#include
#include
#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;
}

两种办法实现进制转换:将十进制数N转换成为r进制数_第4张图片

两种办法实现进制转换:将十进制数N转换成为r进制数_第5张图片

两种办法实现进制转换:将十进制数N转换成为r进制数_第6张图片

你可能感兴趣的:(数据结构代码汇总,C语言,进制转换,数据结构,递归,栈)