Header Ads

[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

Được tạo bởi Blogger.