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); }
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); }
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; }