实验1:有两个指数递减的一元多项式,写一个程序先求这个多项式的和,再求它们的积,
我是按照指数递增来做的,
求积没有做,明天再做,
我没感觉到难,因为这只是前面的一个扩展罢了,
java 代码
- import java.io.*;
- import java.util.StringTokenizer;
-
- class Node {
- public double factor;
- public int element;
- public Node next;
- public Node(double factor, int element) {
- this(factor, element, null);
- }
- public Node(double factor, int element, Node next) {
- this.factor = factor;
- this.element = element;
- this.next = next;
- }
- }
-
- class LinkedList {
- Node header;
- public LinkedList() {
- header = null;
- }
- public boolean isEmpty() {
- return header == null;
- }
- public void addtoTail(double d, int e) {
- if (isEmpty()) {
- header = new Node(d, e);
- } else {
- Node temp = header;
- while (temp.next != null) {
- temp = temp.next;
- }
- Node node = new Node(d, e);
- temp.next = node;
- }
- }
-
- public void printAll() {
- for (Node temp = header; temp != null; temp = temp.next) {
- if(temp.next==null){
- System.out.print(temp.factor + "x" + temp.element );
- }
- else{
- System.out.print(temp.factor + "x" + temp.element + "+");
- }
- }
- System.out.println();
- }
-
- public void insertA(LinkedList la, LinkedList lb) {
- Node heada = la.header;
- Node headb = lb.header;
- while (headb != null) {
- if (headb.element < la.header.element) {
- int i = headb.element;
- double j = headb.factor;
- Node node = new Node(j, i);
- node.next = heada;
- la.header = node;
- headb = headb.next;
- } else {
- heada = la.header;
- while (headb.element > heada.next.element
- && heada.next.next != null) {
- heada = heada.next;
- }
- if (heada.next.next != null) {
- int i = headb.element;
- double j = headb.factor;
- Node node = new Node(j, i);
- node.next = heada.next;
- heada.next = node;
- headb = headb.next;
- } else if (heada.next.next == null) {
- if (headb.element <= heada.next.element) {
- int i = headb.element;
- double j = headb.factor;
- Node node = new Node(j, i);
- node.next = heada.next;
- heada.next = node;
- headb = headb.next;
- } else {
- int i = headb.element;
- double j = headb.factor;
- Node node = new Node(j, i);
- heada.next.next = node;
- headb = headb.next;
- }
- }
- }
- }
- }
-
- public void forAdd(LinkedList la){
- Node temp=la.header;
- while(temp.next!=null){
- if(temp.element==temp.next.element){
- double i=temp.factor;
- double j=temp.next.factor;
- double m=i+j;
- temp.factor=m;
- temp.next=temp.next.next;
-
- }
- else{
- temp=temp.next;
- }
- }
- }
- }
-
- public class Multinomial {
- public static void main(String args[]) throws IOException {
- System.out.println("请输入两个多项式,要求多项式的系数由低到高排列,第一个多项式至少有两个节点");
- LinkedList la = new LinkedList();
- LinkedList lb = new LinkedList();
- for (int i = 3; i < 12; i = i + 2) {
- la.addtoTail(i, i);
- }
- la.printAll();
- for (int i = 2; i < 17; i = i + 3) {
- lb.addtoTail(i, i);
- }
- lb.printAll();
- la.insertA(la, lb);
- la.printAll();
- la.forAdd(la);
- la.printAll();
- System.out.println("以上为测试,请输入第一个多项式的系数和指数,用空格隔开");
-
- LinkedList lc=new LinkedList();
- LinkedList ld=new LinkedList();
- BufferedReader br1 = new BufferedReader(new InputStreamReader(System.in));
- String s1=br1.readLine();
- StringTokenizer fen=new StringTokenizer(s1," ");
- int n1=fen.countTokens();
- int m1=n1/2;
- if(n1%2==1){
- System.out.println("您输入了不匹配的多项式");
- }
- double x1[]=new double[m1];
- int y1[]=new int[m1];
- for(int i=0; i<m1; i++){
- x1[i]=Double.parseDouble(fen.nextToken());
- y1[i]=Integer.parseInt(fen.nextToken());
- lc.addtoTail(x1[i], y1[i]);
- }
- System.out.println("第一个多项式为: ");
- lc.printAll();
-
- System.out.println("请输入第二个多项式的系数和指数,用空格隔开");
- BufferedReader br2 = new BufferedReader(new InputStreamReader(System.in));
- String s2=br2.readLine();
- StringTokenizer fen2=new StringTokenizer(s2," ");
- int n2=fen2.countTokens();
- int m2=n2/2;
- if(n2%2==1){
- System.out.println("您输入了不匹配的多项式");
- }
- double x2[]=new double[m2];
- int y2[]=new int[m2];
- for(int i=0; i<m2; i++){
- x2[i]=Double.parseDouble(fen2.nextToken());
- y2[i]=Integer.parseInt(fen2.nextToken());
- ld.addtoTail(x2[i], y2[i]);
- }
- System.out.println("第二个多项式为: ");
- ld.printAll();
-
- lc.insertA(lc, ld);
- System.out.print("插入后的多项式为: ");
- lc.printAll();
- lc.forAdd(lc);
- System.out.println("生成的多项式为: ");
- lc.printAll();
- }
- }
运行结果:
请输入两个多项式,要求多项式的系数由低到高排列,第一个多项式至少有两个节点
3.0x3+5.0x5+7.0x7+9.0x9+11.0x11
2.0x2+5.0x5+8.0x8+11.0x11+14.0x14
2.0x2+3.0x3+5.0x5+5.0x5+7.0x7+8.0x8+9.0x9+11.0x11+11.0x11+14.0x14
2.0x2+3.0x3+10.0x5+7.0x7+8.0x8+9.0x9+22.0x11+14.0x14
以上为测试,请输入第一个多项式的系数和指数,用空格隔开
3 2 4 3 7 5 9 7 10 9 12 10
第一个多项式为:
3.0x2+4.0x3+7.0x5+9.0x7+10.0x9+12.0x10
请输入第二个多项式的系数和指数,用空格隔开
2 2 3 3 4 4 7 6 8 7 9 10
第二个多项式为:
2.0x2+3.0x3+4.0x4+7.0x6+8.0x7+9.0x10
插入后的多项式为: 3.0x2+2.0x2+3.0x3+4.0x3+4.0x4+7.0x5+7.0x6+8.0x7+9.0x7+10.0x9+9.0x10+12.0x10
生成的多项式为:
5.0x2+7.0x3+4.0x4+7.0x5+7.0x6+17.0x7+10.0x9+21.0x10
主函数写的有点墨迹,
只看那几个有用的函数就好...
明天还要写乘积,那个要好写一些...
姨父送我的碟子收到了,
真是用心良苦...
7G的视频,
够我学到大四的了...
我告诉自己:
以后即使再忙,也要腾出时间来学英语,
周末即使再不想动,也要往家里打电话!!
|