java 一元多项式的输出_1010 一元多项式求导 (JAVA)

设计函数求一元多项式的导数。(注:x​n​​(n为整数)的一阶导数为nx​n−1​​。)

输入格式:

以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过 1000 的整数)。数字间以空格分隔。

输出格式:

以与输入相同的格式输出导数多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。注意“零多项式”的指数和系数都是 0,但是表示为 0 0。

输入样例:

3 4 -5 2 6 1 -2 0

输出样例:

12 3 -10 1 6 0

思路:

1.读题后,会获得一个偶数个值的数组

2.假设系数为a,指数为b;需要输出a*b+" "+(b-1);

3.如果输入的就是零多项式(即 a 0),那么就直接输出“0 0”;

4.如果输入的是非零项多项式,系数a(可为0或其他数字)但最后的指数b为0,那么不输出任何值;

按思路写了一版:

import java.util.ArrayList;

import java.util.List;

import java.util.Scanner;

public class Main {

public static void main(String[] args) {

// TODO Auto-generated method stub

Scanner in =new Scanner(System.in);

Listmylist=new ArrayList();

boolean isOver=false;

int tempValue=0;

int a,b,count=0;

String result ="";

while(!isOver)

{

a=in.nextInt();

b=in.nextInt();

tempValue=a*b;

if(b==0)

{

mylist.add(a);

mylist.add(b);

isOver=true;

}

else

{

mylist.add(a);

mylist.add(b);

}

}

for(int i =0;i

{

a=mylist.get(i);

b=mylist.get(i+1);

/*

* 1. 只有0

* 3. 最后有0

* */

if(count==0)

{

if(a*b==0)

{

result="0 0";

}

else

{

result=result+a*b+" "+(b-1);

count++;

}

}

else

{

if(a*b==0)

{

if(a==0&&b!=0)

{

result=result+" "+0+" "+0;

}

else if(a!=0&&b==0)

{

result=result+"";

}

}

else if(b>0)

{

result=result+" "+a*b+" "+(b-1);

}

}

}

System.out.println(result);

}

}

然而,发现有用例不通过,遂百度,发现如下问题:

1. 输入的测试用例 不一定以指数为0时结束,可能输入一行任意值就结束了;

2. 如果系数a 为0,但指数b不等于0,也要输出 a +" "+(b-1);

参考:https://blog.csdn.net/qq_34594236/article/details/51533962

改完后:

import java.util.Scanner;

public class Main {

public static void main(String[] args) {

// TODO Auto-generated method stub

Scanner in =new Scanner(System.in);

String Str=in.nextLine();

String[]tempS=Str.split("\\s+");//见末尾,意思为把所有空格都剔除掉并切割元素,分成一个数组

int count=0;

/*

* 一定是偶数

* */

String result ="";

for(int i =0;i

{

int a =Integer.parseInt(tempS[i]);//系数

int b =Integer.parseInt(tempS[i+1]);//指数

if(count==0&&b==0)

{

result="0 0";

}

else if(count==0)

{

result=a*b+" "+(b-1);

count++;

}

else if(count!=0&&b!=0)

{

result=result+" "+a*b+" "+(b-1);

}

else if(count!=0&&b==0)

{

result=result+"";

}

}

System.out.print(result);

}

}

关于:

String[]tempS=Str.split("\\s+");

正则表达式,

\\d表示 0-9 的数字,

\\s表示 空格,回车,换行等空白符,

\\w表示单词字符(数字字母下划线)

+号表示一个或多个的意思

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值