当前位置:网站首页>Utiliser la pile pour convertir le binaire en décimal

Utiliser la pile pour convertir le binaire en décimal

2022-07-07 12:26:00 Je ne peux pas le laisser tomber.

Comment convertir le binaire en décimal?

Prends un marron.:Par exemple,(100101)2(C'est2C'est un indice.)Méthode de conversion en décimale:

1*2^0+0*2^1+1*2^2+0*2^3+0*2^4+1*2^5

C'est facile à faire après:100101Ordre de pile1->0->0->1->0->1

Pas grand - chose.,Directement au Code

Définissez d'abord une pile avec une structure:

typedef struct {
	ElemType *base;
	ElemType *top;
	int stacksize;
} sqstack;

Initialiser la pile:

void InitStack(sqstack *s) { //Initialiser la pile
	s->base = (ElemType *)malloc(STACK_INIT_SIZE * sizeof(ElemType)); //mallocDemande d'espace,
	if (!s->base) { //Si la demande échoue
		exit(0);
	}
	s->top = s->base; //Le Haut de la pile est égal au bas de la pile
	s->stacksize = STACK_INIT_SIZE;
}

Insérer(Pile de pression)Fonctionnement:

void Push(sqstack*s, ElemType e) { //Opération d'insertion(Pile de pression)
	if (s->top - s->base >= s->stacksize) {// Si la pile déborde  
		s->base = (ElemType*)realloc(s->base, (s->stacksize + STACKINCREMENT) * sizeof(ElemType));//reallocDemande d'espace, Enregistrer les données originales , Et ajouter un nouvel espace , Pour trouver un nouvel espace pour stocker les données 
	 
		if (!s->base) {
			exit(0);
		}
	}
	*(s->top) = e;// Affectation du Haut de la pile  
	s->top++;//En haut de la pile+1 
}

Jetez(Hors de la pile)Fonctionnement:

void Pop(sqstack*s, ElemType*e) {// Lancer l'opération  
	if (s->top == s->base) {
		return;
	}
	*e = *--(s->top); 
}

Calculer la longueur de la pile:

int StackLen(sqstack s) {//Calculer la longueur de la pile 
	return (s.top - s.base);
}

Fonction principale:

int main() {
	ElemType c;
	sqstack s;
	int len, sum = 0;
	InitStack(&s);
	printf("Veuillez saisir un nombre binaire,Entrée# Le symbole indique la fin !\n");
	scanf("%c", &c);
	while (c != '#') {
			Push(&s, c);
			scanf("%c", &c);
		}
	getchar();//Espace absorbant 
	len = StackLen(s);
	printf("La capacité actuelle de la pile est:%d\n", len);
	for (int i = 0; i < len; i++) {
		Pop(&s, &c);
		sum = sum + ((c - 48) << i);//c-48Parascll Conversion de la table de codes en forme ,(c-48)<<iL'Opération bit est équivalente à2^i 
	}
	printf(" Le nombre décimal converti est :%d\n", sum);
	return 0;
}

Tout le Code:

#include<stdio.h>
#include<stdlib.h>

#define STACK_INIT_SIZE 20
#define STACKINCREMENT 10

typedef char ElemType;
typedef struct {
	ElemType *base;
	ElemType *top;
	int stacksize;
} sqstack;
void InitStack(sqstack *s) { //Initialiser la pile
	s->base = (ElemType *)malloc(STACK_INIT_SIZE * sizeof(ElemType)); //mallocDemande d'espace,
	if (!s->base) { //Si la demande échoue
		exit(0);
	}
	s->top = s->base; //Le Haut de la pile est égal au bas de la pile
	s->stacksize = STACK_INIT_SIZE;
}
void Push(sqstack*s, ElemType e) { //Opération d'insertion(Pile de pression)
	if (s->top - s->base >= s->stacksize) {// Si la pile déborde  
		s->base = (ElemType*)realloc(s->base, (s->stacksize + STACKINCREMENT) * sizeof(ElemType));//reallocDemande d'espace, Enregistrer les données originales , Et ajouter un nouvel espace , Pour trouver un nouvel espace pour stocker les données 
	 
		if (!s->base) {
			exit(0);
		}
	}
	*(s->top) = e;// Affectation du Haut de la pile  
	s->top++;//En haut de la pile+1 
}
void Pop(sqstack*s, ElemType*e) {// Lancer l'opération  
	if (s->top == s->base) {
		return;
	}
	*e = *--(s->top); 
}
int StackLen(sqstack s) {//Calculer la longueur de la pile 
	return (s.top - s.base);
}
int main() {
	ElemType c;
	sqstack s;
	int len, sum = 0;
	InitStack(&s);
	printf("Veuillez saisir un nombre binaire,Entrée# Le symbole indique la fin !\n");
	scanf("%c", &c);
	while (c != '#') {
			Push(&s, c);
			scanf("%c", &c);
		}
	getchar();//Espace absorbant 
	len = StackLen(s);
	printf("La capacité actuelle de la pile est:%d\n", len);
	for (int i = 0; i < len; i++) {
		Pop(&s, &c);
		sum = sum + ((c - 48) << i);//c-48Parascll Conversion de la table de codes en forme ,(c-48)<<iL'Opération bit est équivalente à2^i 
	}
	printf(" Le nombre décimal converti est :%d\n", sum);
	return 0;
}

原网站

版权声明
本文为[Je ne peux pas le laisser tomber.]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/188/202207071027393654.html