我自己输入的test case,输出都没什么问题。但是提交答案不对。希望热爱算法的朋友指点迷津。
题目: 一元多项式的乘法与加法运算 (20 分)
设计函数分别求两个一元多项式的乘积与和。
输入格式:
输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。
输出格式:
输出分2行,分别以指数递降方式输出乘积多项式以及和多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。零多项式应输出0 0。
输入样例:
4 3 4 -5 2 6 1 -2 0
3 5 20 -7 4 3 1
输出样例:
15 24 -25 22 30 21 -10 20 -21 8 35 6 -33 5 14 4 -15 3 18 2 -6 1
5 20 -4 4 -5 2 9 1 -2 0
我的答案如下:
package linearStructure;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
public class Main {
public static void main(String[] args) throws IOException {
LinkedList<Node> nodes1 = readNodes();
LinkedList<Node> nodes2 = readNodes();
LinkedList<Node> pMul = polyMul(nodes1, nodes2);
printPoly(pMul);
LinkedList<Node> pSum = polySum(nodes1, nodes2);
printPoly(pSum);
}
private static void printPoly(LinkedList<Node> list) {
StringBuilder sb = new StringBuilder();
for (Node poly : list) {
sb.append(poly.getCoef()).append(" ").append(poly.getExpon()).append(" ");
}
System.out.println(sb.toString().trim());
}
private static LinkedList<Node> readNodes() throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] str = br.readLine().replaceAll("( )+", " ").split(" ");
LinkedList<Node> list = new LinkedList<>();
for (int i = 1; i < str.length; i += 2) {
list.add(new Node(Integer.parseInt(str[i]), Integer.parseInt(str[i + 1])));
}
return list;
}
// 内部类
static class Node {
int coef;
int expon;
private int getCoef() {
return coef;
}
private int getExpon() {
return expon;
}
private Node(int c, int e) {
this.coef = c;
this.expon = e;
}
}
private static LinkedList<Node> polySum(LinkedList<Node> n1, LinkedList<Node> n2) {
LinkedList<Node> list = new LinkedList<>();
if(n1.size()==0&&n2.size()==0){
list.add(new Node(0, 0));
return list;
}
if (n1.size() == 0) {
return n2;
}
if (n2.size() == 0) {
return n1;
}
while (n1.size() != 0 && n2.size() != 0) {
switch (Integer.compare(n1.getFirst().getExpon(), n2.getFirst().getExpon())) {
case 1:
list.add(n1.pop());
break;
case 0:
int c = n1.getFirst().getCoef() + n2.getFirst().getCoef();
if (c != 0) {
list.add(new Node(c, n1.getFirst().getExpon()));
}
n1.removeFirst();
n2.removeFirst();
break;
case -1:
list.add(n2.pop());
break;
}
}
if (n1.size() != 0) {
list.addAll(n1);
} else if (n2.size() != 0) {
list.addAll(n2);
}
if(list.size()==0){
list.add(new Node(0, 0));
}
return list;
}
private static LinkedList<Node> polyMul(LinkedList<Node> n1, LinkedList<Node> n2) {
LinkedList<Node> list = new LinkedList<>();
if (n1.size() == 0 || n2.size() == 0) {
list.add(new Node(0, 0));
return list;
}
for (Node node1 : n1) {
for (Node node2 : n2) {
int c = node1.getCoef() * node2.getCoef();
int e = node1.getExpon() + node2.getExpon();
LinkedList<Node> nodeList = new LinkedList<>();
nodeList.add(new Node(c, e));
list = polySum(list, nodeList);
}
}
return list;
}
}
test case:
提交答案返回:
不知道题主解决了没有
我跟你一样,我用C语言编写的过了,改成java语言。
然后在eclipse 上没有问题,上了PTA就是完全错误