#include <stdio.h>
#include <stdlib.h>
#define SIZE 5
typedef struct Queue Queue;
struct Queue
{
int *items;
int head;
int tail;
int capacity ;
};
Queue *queue_create();
void queue_enqueue(Queue *queue, int element);
int queue_dequeue(Queue *queue);
int power(int base, int exp);
int main()
{
char c;
int result = 0;
int queue_length = 0;
// vuvejdame opashka
Queue *queue = queue_create();
// proverqvame dali simvolite, koito vuvejdame sa '0' ili '1'
while((c = getchar()) != EOF)
{
if(c == '0' || c == '1')
{
// pulnim suotvetno opashkata s funkciq enqueue i uvelichavame promenliva suotvetsvashta na duljinata na opashkata
queue_enqueue(queue, c - '0');
queue_length++;
}
}
int i= 0;
// s tozi cikul postigame, tova che subirame poluchenite stoinosti ot lqvo na dqsno, a ne kakto po standartniq nachin binary-dexcimal ot dqsno na lqvo
for(i = queue_length-1; i >= 0; i--)
{
// izvajdame stoinostite, s funkciq dequeue, ot opashkata i umnojavame po 2 na stepen "i" kudeto "i" e duljinata na opashkata "-1"
result = result + (queue_dequeue(queue) * power(2, i));
}
printf("%d\n", result);
return 0;
}
Queue *queue_create()
{
Queue *queue = (Queue *)malloc(sizeof(Queue));
queue->items = (int *)malloc(SIZE * sizeof(int));
queue->capacity = SIZE;
queue->head = queue->tail = 0;
return queue;
}
// funkciq za vdigane na stepen
int power(int base, int exp)
{
int result = base;
if (exp == 0) {
return 1;
} else {
int i;
for (i=0;i<exp-1;i++) {
result *= base;
}
return result;
}
}
void queue_enqueue(Queue *queue, int element)
{
if(queue->tail == queue->capacity)
{
queue->items = (int *)realloc(queue->items, queue->capacity * 2 * sizeof(int));
queue->capacity *= 2;
}
(queue->items)[queue->tail] = element;
queue->tail++;
}
int queue_dequeue(Queue *queue)
{
if(queue->head < queue->tail)
{
return (queue->items)[queue->head++];
}
else
{
return -1;
}
}
Пример:1111 1111
Отговор :1.2^7 + 1.2^6 + 1.2^5 + 1.2^4 + 1.2^3 + 1.2^2 + 1.2^1 + 1.2^0 = 128 + 64 + 32 + 16 + 8 + 4 + 2 + 1 = 255