564{
565 if (f == nullptr)
566 {
567 if (g == nullptr) return 0;
568 return 1;
569 }
570 if (g == nullptr) return -1;
571 if (f->deg > g->deg) return -1;
572 if (f->deg < g->deg) return 1;
573
574 if (level == 0)
575 {
576 for (int i = f->deg; i >= 0; i--)
577 {
578 long cmp = f->arr.ints[i] - g->arr.ints[i];
579 if (cmp > 0) return -1;
580 if (cmp < 0) return 1;
581 }
582 }
583 else
584 {
585 for (int i = f->deg; i >= 0; i--)
586 {
587 int cmp =
compare(level - 1, f->arr.polys[i], g->arr.polys[i]);
588 if (cmp > 0) return -1;
589 if (cmp < 0) return 1;
590 }
591 }
592 return 0;
593}
int compare(int level, const TowerPolynomial f, const TowerPolynomial g)