[ create a new paste ] login | about

Link: http://codepad.org/INsdx9B5    [ raw code | output | fork ]

C, pasted on Mar 25:
#include <stdlib.h>
#include <stdio.h>

/*
**
*/
#define NBRA		(e->a)
#define NBRB		(e->b)
#define SIZEA		(e->sizea)
#define SIZEB		(e->sizeb)
#define RESULT		(e->result)
#define SIZERESULT	(e->sizeresult)
#define CHAR_ZERO	'0';
#define CBASE(i)	(e->base[i])
#define IBASE(c)	(e->ibase[c])

/*
**
*/
typedef struct		s_env
{
  char			*a;
  char			*b;
  int			sizea;
  int			sizeb;
  char			*result;
  int			sizeresult;
  char			*base;
  char			ibase[256];
  int			sbase;
}			t_env;			
/*
**
*/

int			str_len(char *s)
{
  int			ret;

  for(ret=0;*s;s++)
    ret++;

  return ret;
}

void			mem_set(char *buff,int c,int size)
{
  for(;size > 0;size--)
    buff[size]=c;
}

t_env			*init_env(char *a,char *b,char *base)
{
  t_env			*e;
  int			i;
  
  e=malloc(sizeof(*e));
  mem_set((char *)e,0,sizeof(*e));
  NBRA=a;  NBRB=b;
  SIZEA=str_len(NBRA);  SIZEB=str_len(NBRB);
  SIZERESULT=SIZEA+SIZEB+1;
  RESULT=malloc(SIZERESULT);
  mem_set(RESULT,0,SIZERESULT);
  e->base=base;
  e->sbase=str_len(base);
  for (i=0;i<e->sbase;i++)
    e->ibase[base[i]]=i;
  
  return e;
}

void			aff_res(t_env *e)
{
  int			i;

  for(i=0;i < SIZERESULT;i++)
    if(RESULT[i])
      printf("%c",RESULT[i]);
  printf("\n");
}

void			multiplication(t_env *e)
{
  int			sa;
  int			sb;
  int			nbr;
  int			ret;

  ret=0;
  for(sb=SIZEB;sb > 0;sb--)
    {
      for(sa=SIZEA;sa > 0;sa--)
	{
	  nbr=IBASE(NBRA[sa-1])*IBASE(NBRB[sb-1])+IBASE(RESULT[sa+sb])+IBASE(ret);
	  ret=nbr/e->sbase;
	  RESULT[sa+sb]=CBASE(nbr%e->sbase);
	}
      if (ret)
	{
	  RESULT[sa+sb]=CBASE(ret);
	  ret=0;
	}
    }
}

/*
**
*/

int			main(int ac, char **av)
{
  t_env			*e;

  e=init_env("ol","oo","loutre");
  multiplication(e);
  aff_res(e);
}


Output:
1
�ool


Create a new paste based on this one


Comments: