/* btoi - konverzija iz datog brojnog sistema u dekadni */
#include <stdio.h>
#include <ctype.h> 

/* Pomocna funkcija koja izracunava vrednost koju predstavlja karakter u datoj osnovi 
   Funkcija vraca -1 ukoliko cifra nije validna.
   
   Npr. 
   cifra 'B' u osnovi 16 ima vrednost 11
   cifra '8' nije validna u osnovi 6

*/
   
int digit_value(char c, int base) {
  /* Proveravamo obicne cifre */
  if (isdigit(c) && c < '0'+base)
	return c-'0';

  /* Proveravamo slovne cifre za mala slova */
  if ('a'<=c && c < 'a'+base-10)
	return c-'a'+10;

  /* Proveravamo slovne cifre za velika slova */
  if ('A'<=c && c < 'A'+base-10)
	return c-'A'+10;
  
  return -1;
}

/* Funkcija izracunava vrednost celog broja koji je zapisan u datom 
   nizu karaktera u datoj osnovi. Za izracunavanje se koristi Hornerova shema. 
*/
int btoi(char s[], int base) {
  int sum = 0;
  
  /* Obradjuju se karakteri sve dok su cifre */
  int i, vr;
  for (i = 0; (vr = digit_value(s[i], base)) != -1; i++)
	sum = base*sum + vr;
  
  return sum;
  
}

int main() {
  char bin[] = "11110000";
  char hex[] = "FF";

  printf("Dekadna vrednost binarnog broja %s je %d\n", bin, btoi(bin, 2));
  printf("Dekadna vrednost heksadekadnog broja %s je %d\n", hex, btoi(hex, 16));
  
  return 0;
}