代码仅供参考,希望读者先自行思考
如下:
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
typedef struct node {
struct node* bottom;
int size;
char top_ele;
}stack;
stack* createstack()
{
stack* a = (stack *)malloc(sizeof(stack));
a->bottom = NULL;
a->size = 0;
return a;
}
stack* create_new_ele(char data)
{
stack* a=(stack*)malloc(sizeof(stack));
a->bottom = NULL;
a->top_ele = data;
return a;
}
void push(stack* a, stack* b)
{
b->bottom = a->bottom;
a->bottom = b;
a->size++;
}
void pop(stack* a)
{
stack* current = a->bottom;
stack* prev = a;
a->size--;
if (a->size < 0)
{
printf("栈为空,无法出栈\n");
}
else
{
prev->bottom = current->bottom;
free(current);
}
}
void printstack(stack* a)
{
while (a->bottom != NULL)
{
printf("%c", a->bottom->top_ele);
a = a->bottom;
}
}
int main()
{
stack *two_stack=createstack();
stack *eight_stack= createstack();
char t;
while ((t = getchar()) != '#')
{
push(two_stack, create_new_ele(t));
}
int cent = 3;
int number = 0;
int count = two_stack->size;
while (count > 2)
{
cent = 3;
number = 0;
while (cent > 0)
{
number = number + (two_stack->bottom->top_ele - 48) * pow(2, 3 - cent);
cent--;
two_stack = two_stack->bottom;
count--;
}
push(eight_stack, create_new_ele(number%8+48));
}
if (count> 0)
{
cent = 3;
number = 0;
while (count > 0)
{
number = number + (two_stack->bottom->top_ele - 48) * pow(2, 3 - cent);
cent--;
two_stack = two_stack->bottom;
count--;
}
push(eight_stack, create_new_ele(number%8+48));
}
printstack(eight_stack);
return 0;
}