题目: 一元多项式求导 (25 分)
设计函数求一元多项式的导数。(注:x?n??(n为整数)的一阶导数为nx?n?1??。)
输入格式:
以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过 1000 的整数)。数字间以空格分隔。
输出格式:
以与输入相同的格式输出导数多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。注意“零多项式”的指数和系数都是 0,但是表示为 0 0。
输入样例:
3 4 -5 2 6 1 -2 0输出样例:
12 3 -10 1 6 0
分析
需要注意的有两点:
- 一元多项式存在没有常数项的可能性,不能以第二个数为零作为终止条件
- 零多项式的判断,当没有进行求导是需要进行判断。
代码实现
//这个代码的判断边界是第二个数为零,有一个用例没有通过,既没有考虑没有常数项的情况 import java.util.Scanner;public class Main {
public static void main(String []args){
int count=0;Scanner input = new Scanner(System.in);int one_letter[]=new int[100];for(int i=0;i<100;i++){
one_letter[i]=input.nextInt();count++;if(one_letter[i]==0)break;}input.close();int k=0;for(int i=0;i<count;i=i+2){
if(one_letter[k+1]!=0){
one_letter[k]=one_letter[k]*one_letter[k+1];one_letter[k+1]--;}elseone_letter[k]=0;k=k+2;}k=0;int flag=0;while (one_letter[k]!=0){
if(k!=0)System.out.print(' ');System.out.print(one_letter[k]+" "+one_letter[k+1]);flag=1;k=k+2;}if(flag==0)System.out.print("0 0");} }
提交结果
但是当判断条件不是这个时,依照我的思路,将数据读入再统一进行计算时,没有办法跳出while(input.hasNext())这个循环,就没有办法进行计算。最后参考了网上的方法,在循环内部边读入边计算边输出。
这个方法只能算是应付过去了这个题目,结果正确,但是在日常的操作中是着实是不可取的,无法判断边界是真的很可怕,一直死循环。
详细可参考Java while(scanner.hasNext())无法跳出的问题
import java.util.Scanner; public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);int one_letter[]=new int[2];int isHaveOutput = 0;while (in.hasNext()) {
one_letter[0] = in.nextInt();one_letter[1] = in.nextInt();if (one_letter[0] * one_letter[1] != 0) {
//当出现零时做判断,是零方程式还是常数项的阶数零if (isHaveOutput!=0) {
System.out.print(" ");} else {
isHaveOutput = 1;}System.out.print(one_letter[0] * one_letter[1] + " " + (one_letter[1] - 1));}}in.close();if (isHaveOutput==0) {
System.out.print("0 0");}} }
提交结果