Пример #1
0
t_nb	*naive_mod(t_nb *nb1, t_nb *nb2, int base)
{
  t_nb	*i;
  t_nb	*j;
  t_nb	*cpy;

  if (nb2->nb[0] == 0)
    {
      my_putstr("error: modulo by zero\n");
      return (NULL);
    }
  if (nb2->nb[0] == 1 && nb2->nb[1] == 255)
    return (nb1);
  if (nbr_cmp(nb1, nb2) < 0)
    return (create_tnbzero());
  i = create_tnbzero();
  j = create_tnbone();
  while (nbr_cmp(nb1, nb2) >= 0)
    {
      cpy = my_tnbcpy(nb2);
      nb1 = my_substract(nb1, cpy, base);
      i = testadd(i, j, base);
      free_snb(cpy);
    }
  free_snb(j);
  return (nb1);
}
Пример #2
0
int	main(int argc, char **argv)
{
  t_nb	*nb1;
  t_nb	*nb2;
  t_nb	*res;

  nb1 = malloc(sizeof(t_nb));
  nb2 = malloc(sizeof(t_nb));
  if (nb1 == NULL || nb2 == NULL)
    return (0);
  nb1->nb = my_strdup(argv[1]);
  nb2->nb = my_strdup(argv[2]);
  nb2->sign = 1;
  nb1->sign = 1;
  nb1->len = my_strlen(argv[1]);
  nb2->len = my_strlen(argv[2]);
  nb1 = adapt_nbr(nb1, nb1->len, "0123456789");
  if (nb1 == NULL)
    return (0);
  nb2 = adapt_nbr(nb2, nb2->len, "0123456789");
  if (nb2 == NULL)
    return (0);
  res = my_substract(nb1, nb2, 10);
  my_disp_test(res);
  my_putchar('\n');
  return (0);
}
Пример #3
0
int main()
{
	int i, j, index, n, len, high_sum, base, tmp;
	while (scanf("%d", &base) == 1 && base) {
		scanf("%s", num);
		len = strlen(num);
		high_sum = 0;
		for (i = 0; i < 10; i++)
			sum[i] = 0;
		for (i = 0; i < len; i++) {
			num[i] -= '0';
			sum[0] += num[i];
			for (j = 0; sum[j] >= base; j++) {
				sum[j] -= base;
				sum[j + 1] += 1;
			}
			if (j > high_sum)
				high_sum = j;
		}
		for (i = 0; i <= high_sum / 2; i++) {
			tmp = sum[i];
			sum[i] = sum[high_sum - i];
			sum[high_sum - i] = tmp;
		}
		index = 0;
		while (index < len - 1 - high_sum) {
			while (my_ncmp(num + index, sum, high_sum + 1) >= 0)
				my_substract(num + index, sum, high_sum + 1, base);
			while (num[index] > 0)
				my_substract(num + index + 1, sum, high_sum + 1, base);
			index++;
		}
		while (my_ncmp(num + index, sum, high_sum + 1) >= 0)
			my_substract(num + index, sum, high_sum + 1, base);
		for (i = index; i < len; i++)
			if (num[i])
				break;
		if (i < len)
			printf("no\n");
		else
			printf("yes\n");
	}
	return 0;
}