[DSA] Chuyển đổi hệ 10 sang hệ 2
Nguồn: Click here
Viết chương trình C sử dụng ngăn xếp để chuyển đổi một số thập phân thành số nhị phân.
1. Sử dụng con trỏ:
#include <stdio.h>
#include <stdlib.h>
#define MAX_STACK_SIZE 100
typedef struct {
int top;
int items[MAX_STACK_SIZE];
} Stack;
void push(Stack *s, int item) {
if (s->top >= MAX_STACK_SIZE - 1) {
printf("Stack overflow!\n");
exit(1);
}
s->items[++(s->top)] = item;
}
int pop(Stack *s) {
if (s->top < 0) {
printf("Stack underflow!\n");
exit(1);
}
return s->items[(s->top)--];
}
int is_empty(Stack *s) {
return (s->top < 0);
}
void dec_to_bin(int num) {
Stack s;
s.top = -1;
while (num != 0) {
int rem = num % 2;
push(&s, rem);
num = num / 2;
}
if (is_empty(&s)) {
printf("0\n");
return;
}
while (!is_empty(&s)) {
printf("%d", pop(&s));
}
printf("\n");
}
int main() {
int num;
printf("Enter a decimal number: ");
scanf("%d", &num);
printf("Binary representation of %d is: ", num);
dec_to_bin(num);
return 0;
}
2. Không sử dụng con trỏ:
#include <stdio.h>
#define MAX_STACK_SIZE 10
int stack[MAX_STACK_SIZE];
int top = -1;
void push(int value) {
if (top == MAX_STACK_SIZE - 1) {
printf("Error: Stack is full!\n");
return;
}
top++;
stack[top] = value;
}
int pop() {
if (top == -1) {
printf("Error: Stack is empty!\n");
return -1;
}
int value = stack[top];
top--;
return value;
}
void decimal_to_binary(int decimal) {
while (decimal != 0) {
int remainder = decimal % 2;
push(remainder);
decimal /= 2;
}
printf("The binary equivalent is: ");
while (top != -1) {
printf("%d", pop());
}
printf("\n");
}
int main() {
int decimal;
printf("Enter a decimal number: ");
scanf("%d", &decimal);
decimal_to_binary(decimal);
return 0;
}
Không có nhận xét nào