设计函数求一元多项式的导数。(注:xn(n为整数)的一阶导数为n*xn-1。)
输入格式:以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。
输出格式:以与输入相同的格式输出导数多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。注意“零多项式”的指数和系数都是0,但是表示为“0 0”。
输入样例:3 4 -5 2 6 1 -2 0输出样例:
12 3 -10 1 6 0
分析:
此题粗看起来不难,但是在线测试的时候测试点比较完备,所以仅仅只是考虑读取整数的话是不能通过在线测试的。
本人的做法是将整行都进行读取,然后提取其中的数字(测试用例中还包括了数字之间不仅仅只有空格的情况),注意还有可能是负数,因此负号也要在合适的情况下提取到。
至于微分过程,其实是相当简单的。
Java代码:
package com.PATDataStruct;
import java.util.ArrayList;
import java.util.Scanner;
public class HomeWork02_4 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner input = new Scanner(System.in);
String str = input.nextLine();
input.close();
char ch[] = str.toCharArray();
ArrayList<Integer> al = new ArrayList<Integer>();
al = char2Int(ch);
// display(ch);
al = diff(al);
display(al);
}
private static ArrayList<Integer> diff(ArrayList<Integer> al) {
if (al.size() == 1){
al.add(0);
}
for (int i = 0; i < al.size(); i = i+2){
al.set(i, al.get(i)*al.get(i+1));
if (al.get(i+1) == 0){
al.set(i+1, 0);
}else{
al.set(i+1, al.get(i+1)-1);
}
}
if (al.size()>2 && al.get(al.size()-2) == 0){
al.remove(al.size()-1);
al.remove(al.size()-1);
}
return al;
}
private static void display(char[] ch) {
// TODO Auto-generated method stub
for (int i = 0; i < ch.length; i++){
System.out.println(ch[i]);
}
}
static ArrayList<Integer> char2Int(char ch[]){
ArrayList<Integer> al = new ArrayList<Integer>();
boolean bool = true;
int st = 0;
int count = 0;
String temp;
for (int i = 0; i < ch.length; i++){
if (ch[i] >= '0' && ch[i] <='9'){
// System.out.println("11111111111");
if (bool){
if (i > 0 && ch[i-1] == '-'){
st = i-1;
count++;
}else {
st = i;
}
// System.out.println("bool = "+bool);
bool = false;
}
// System.out.println("bool = "+bool);
count++;
}
// System.out.println("count = "+count);
if((!Character.isDigit(ch[i]) && !bool) || (i == ch.length-1 && !bool)){
temp = String.valueOf(ch, st, count);
// System.out.println("temp = "+temp);
al.add(Integer.parseInt(temp));
count = 0;
bool = true;
}
}
return al;
}
static void display(ArrayList<Integer> al){
// System.out.println(al.size());
for (int i = 0; i < al.size(); i++){
if (i == 0){
System.out.print(al.get(i));
}else{
System.out.print(" "+al.get(i));
}
}
}
}