个人觉得题目要求的格式太丑,就做成了如下形式
f(x)=3x^4-5x^2+6x-2
f(x)'=12x^3-10x+6
源数据用链表存储指数和系数。
- /*
- 设计函数求一元多项式的导数。
- 输入格式:以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。
- 输出格式:以与输入相同的格式输出导数多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。注意“零多项式”的指数和系数都是0,但是表示为“0 0”。
- 输入样例:
- 3 4 -5 2 6 1 -2 0
- 输出样例:
- 12 3 -10 1 6 0
- */
- class Polynomial//多项式
- {
- private static class PolyNode{
- public int coef;//系数
- public int expon;//指数
- //public PolyNode previous;//上一个节点,加上这句可以做成双向链表
- public PolyNode next;//下一个节点
- public PolyNode(int coef,int expon){
- this.coef=coef;
- this.expon=expon;
- }
- public PolyNode addElement(int coef,int expon){
- this.next=new PolyNode(coef,expon);
- return this.next;
- }
- }
- public static void main(String[] args) {
- PolyNode srcLink=new PolyNode(3,4);
- PolyNode pointer=srcLink.addElement(-5,2);
- pointer=pointer.addElement(6,1);
- pointer=pointer.addElement(-2,0);
- pointer=null;//链表已经生成完毕,现在可以取消指针对尾节点的引用
- System.out.print("f(x)=");
- printlink(srcLink);
- PolyNode destLink=getDerivatives(srcLink);
- System.out.print("f(x)'=");
- printlink(destLink);
- }
-
- public static PolyNode getDerivatives(PolyNode srcLink){
- PolyNode destLink=null;//保存结果的头指针
- PolyNode pointer=null;//用于生成链表的辅助指针
- int destcoef,destexpon;//目标系数与目标指数
- while(srcLink!=null){
- if(srcLink.expon!=0){
- destcoef=srcLink.expon*srcLink.coef;
- destexpon=srcLink.expon-1;
- if(destLink==null)
- pointer=destLink=new PolyNode(destcoef,destexpon);
- else
- pointer=pointer.addElement(destcoef,destexpon);
- }
- srcLink=srcLink.next;
- }
- return destLink;
-
- }
- public static void printlink(PolyNode srcLink) {
- //PolyNode srcLink=pointer;
- while(srcLink!=null){
- System.out.print(srcLink.coef);
- if(srcLink.expon!=0){
- if(srcLink.expon==1) System.out.print("x");
- else System.out.print("x^"+srcLink.expon);
- }
- if(srcLink.next!=null&&srcLink.next.coef>0)
- System.out.print("+");
- srcLink=srcLink.next;//
- }
- System.out.println();
- }
- }
复制代码
|
|