用java代码解决多项式结算问题,
问题:输入2个多项式的各项系数和质数,试变成求出他们的和,并以手写的习惯输出此多项式。
问题的重点在最后一句话,用手写的习惯输出。
class Ploy{
class Node {
public int coff;
public int idx;
public Node(int c, int i){
this.coff = c;
this.idx = i;
}
}
private ArrayList list1;
private ArrayList list2;
private ArrayList result = new ArrayList<>();
private ArrayList procInputString(final String line){
ArrayList list = new ArrayList<>();
for (int i=0; i
int coff = 0;
if (line.charAt(i) == '-'){
i++;
coff = '0' - line.charAt(i);
}else {
coff = line.charAt(i) - '0';
}
int idx = line.charAt(i+1) - '0';
if (list.size() != 0 && list.get(list.size() -1).idx < idx) {
System.out.println("input error");
return null;
}
list.add(new Node(coff, idx));
}
return list;
}
public Ploy(final String line1, final String line2) {
list1 = procInputString(line1);
list2 = procInputString(line2);
}
public Ploy Add(){
int i=0;
int j=0;
while (i
if (list1.get(i).idx > list2.get(j).idx){
result.add(list1.get(i));
i++;
}else if(list1.get(i).idx == list2.get(j).idx){
result.add(new Node(list1.get(i).coff + list2.get(j).coff,
list1.get(i).idx));
i++;
j++;
} else {
result.add(list2.get(j));
j++;
}
}
while (i < list1.size()) {
result.add(list1.get(i));
i++;
}
while (j < list2.size()) {
result.add(list2.get(j));
j++;
}
return this;
}
void Print(){
StringBuilder sb = new StringBuilder();
if (result.size() == 0) {
sb.append(0);
System.out.println(sb);
return;
}
//1
int i=0;
while(i < result.size() && result.get(i).coff == 0){//过滤掉‘开始’所有系数为0的项
i++;
}
if (i == result.size()){
sb.append(0);
System.out.println(sb);
return;
}
//2
while (i < result.size()){
if (result.get(i).coff > 0){
if (sb.length() != 0){//是否为首项
sb.append('+');
}
if (result.get(i).idx == 0){
sb.append(result.get(i).coff);
i++;
continue;
}
if (result.get(i).coff != 1){
sb.append(result.get(i).coff);
}
sb.append('X');
if (result.get(i).idx != 1){
sb.append(result.get(i).idx);
}
}
if(result.get(i).coff < 0){
if (result.get(i).idx == 0){
sb.append(result.get(i).coff);
i++;
continue;
}
if (result.get(i).coff != -1){
sb.append(result.get(i).coff);
}
sb.append('X');
if (result.get(i).idx != 1){
sb.append(result.get(i).idx);
}
}
//===0就跳过
i++;
}
System.out.println(sb);
}
public static void main(String[] args) throws Exception
{
// "1230","-12-11", "1230","-12-30", "1230","15-12-40"
Ploy p = new Ploy("1230","25-1271-40");
p.Add().Print();
}
}