题目描述:
设计函数求一元多项式的导数。(注: x n x^n xn (n为整数)的一阶导数为 n x n − 1 nx^{n−1} nxn−1 。)
输入格式:
以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过 1000 的整数)。数字间以空格分隔。
输出格式:
以与输入相同的格式输出导数多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。注意“零多项式”的指数和系数都是 0,但是表示为 0 0。
输入样例:
3 4 -5 2 6 1 -2 0
输出样例:
12 3 -10 1 6 0
代码示例(Java实现)
package xyz.snowflake.PAT.乙;
import java.util.Scanner;
/**
* 这道题目的意思是只有这种情况才会输出 0 0
* 例如:0 4 0 3 0 2 0 1 或者 0 4 0 3 2 0 等等,也就是每一组至少要有一个 0
*
* @create-date 2019-06-07 17:15
*/
public class Main1010 {
// 两种方法只是处理输入数据不同,一个是直接读取一行,然后通过 split 方法进行分割,
// 可能是题目并没有说只有一个空格,这就导致了 String 类的 split 切割字符串产生的
// 数组会出现问题,导致后面强转为 int 时,会抛出异常。
// 此题是 切割字符串的方式
// public static void main(String[] args) {
// Scanner cin = new Scanner(System.in);
// StringBuilder str = new StringBuilder();
//
// String str2 = cin.nextLine();
// String[] strs = str2.split(" ");
//
// boolean flag = false;
// for (int i = 0; i < strs.length; i += 2) {
// int num1 = Integer.parseInt(strs[i]);
// int num2 = Integer.parseInt(strs[i + 1]);
//
// // 只要进去一次,就说明不是 0 多项式
// if (num1 * num2 != 0) {
// flag = true;
// str.append(num1 * num2)
// .append(" ")
// .append(num2 - 1)
// .append(" ");
// }
// }
// if (!flag) {
// str.append("0 0 ");
// }
// System.out.println(str.substring(0, str.length() - 1));
// }
/**
* 这个方法是通过监听是否还有输入,直接获取到 int ,这样的方式会自动过滤掉所有的
* 空格,成功。
*/
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
StringBuilder str = new StringBuilder();
// 定义一个标志位
boolean flag = false;
while (cin.hasNext()){
int num1 = cin.nextInt();
int num2 = cin.nextInt();
// 只要进去一次,就说明不是 0 多项式
if (num1 * num2 != 0) {
flag = true;
str.append(num1 * num2)
.append(" ")
.append(num2 - 1)
.append(" ");
}
}
if (!flag) {
str.append("0 0 ");
}
System.out.print(str.substring(0, str.length() - 1));
}
}