import java.io.*;
import java.util.Scanner;
class Polynomial {
class Term {
int coef;
int exp;
Term link;
}
private Term head; // 첫번째 항을 가리키는 레퍼런스 변수
private Term tail; // 마지막 항을 가리키는 레퍼런스 변수
public Polynomial() {
head = tail = null;
}
// @param coef 계수
// @param exp 지수
public void addTerm(int coef, int exp) {
Term term = new Term();
term.coef = coef;
term.exp = exp;
term.link = null;
if (head == null) { // 처음으로 항이 추가되는 경우
head = tail = term;
} else {
tail.link = term;
tail = term; // 마지막을 가리키는 항을 재지정
}
}
// 출력할 때 사용
// @return 객체를 문자열로 반환 (예: 3x^15+2x^3+4x^2+x+5 )
public String toString() {
Term x = head;
StringBuffer sb = new StringBuffer();
int seq = 0;
for (x = head; x != null; x = x.link) {
if(seq >= 1){
if(x.coef > 0){
sb.append("+");
}
}
seq++;
if(x.coef == 0) {
continue;
}else if(x.coef == 1){
if(x.exp ==0) {
sb.append("1");
}else if(x.exp == 1) {
sb.append("x");
}else
sb.append("x^").append(x.exp);
}else {
if(x.exp ==0) {
sb.append(x.coef);
}else if(x.exp==1) {
sb.append(x.coef).append("x");
}else {
sb.append(x.coef).append("x^").append(x.exp);
}
}
}
if(sb.toString() == null) {
return "0";
}else {
return sb.toString();
}
}
// 두 개의 다항식을 더한다.
// @param p1 첫번째 다항식
// @param p2 두번째 다항식
// @return 두 개의 다항식을 더한 결과
public static Polynomial polyAdd(Polynomial a, Polynomial b) {
Term p = a.head;
Term q = b.head;
Polynomial c = new Polynomial();
while(p!=null && q!=null) {
if(p.exp == q.exp) {
int sum = p.coef + q.coef;
if(sum!=0) {
c.addTerm(sum, p.exp);
}else {
c.addTerm(0, p.exp);
}
p=p.link;
q=q.link;
}else if(p.exp < q.exp){
c.addTerm(q.coef, q.exp);
q=q.link;
}else {
c.addTerm(p.coef, p.exp);
p=p.link;
}
}
while(p!=null) {
c.addTerm(p.coef, p.exp);
p=p.link;
}
while(q!=null) {
c.addTerm(q.coef, q.exp);
q=q.link;
}
return c;
}
}
class Main {
public static void main(String[] args) throws Exception {
Scanner scan = new Scanner(System.in);
// 첫번째 다항식 입력
Polynomial p1 = new Polynomial();
int no = scan.nextInt();
for(int i = 0; i < no; i++) {
int coef = scan.nextInt();
int exp = scan.nextInt();
p1.addTerm(coef, exp);
}
Polynomial p2 = new Polynomial();
no = scan.nextInt();
for(int i = 0; i < no; i++) {
int coef = scan.nextInt();
int exp = scan.nextInt();
p2.addTerm(coef, exp);
}
// 두개의 다항식 덧셈
Polynomial p3 = Polynomial.polyAdd(p1,p2);
System.out.print(p3); // 이것은 System.out.print(p3.toString())과 동일
}
}
다항식 덧셈하는 프로그램인데
3
2 3 4 2 5 0
3
-2 3 -4 2 -5 0
이렇게 입력할때는 결과값으로 0이출력되게 하고싶은데 이코드는 아무것도 안나옴;;
뭘바꿔야하는거임?
스트링버퍼가 생성되었으니 null 로 체크는 안되겠지. 공백체크로 해야겠지 - dc App