题目

时间限制
400 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
设计函数求一元多项式的导数。(注:xn(n为整数)的一阶导数为n*xn-1。)
输入格式:
以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。
输出格式:
以与输入相同的格式输出导数多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。注意“零多项式”的指数和系数都是0,但是表示为“0 0”。
输入样例:

3 4 -5 2 6 1 -2 0

输出样例:

12 3 -10 1 6 0

分析:

输入一个多项式,输出对应的 指数*系数 和 指数-1 即可,不过需要注意一些特殊情况,就有以下两个问题:
1.如何输入,即什么时候输入结束?
2.哪些特殊情况?
对于1,我们可以设置一个字符变量 t 每次来读取一个多项式(指数+系数)后的空格/回车,最后输入完成肯定是回车,所以我们可以根据这一条件判断当前是否结束输入。
对于2,根据题干,“零多项式” 的指数和系数都是0,但是输出为“0 0”,其实就有两种情况,一种是原来指数就是0,一种是求导后指数是0,并且要求系数都为0;还有一种特殊情况,当只有一对,比如系数为5,指数为0,那么按照我们目前的条件是没有输出的,肯定是不对的,最后跳出循环的时候再补上。

代码(cpp)

#include<iostream>
using namespace std;
int main(){
    int ratio;  //系数
    int index;  //指数
    char t;
    int flag=0;
    while(scanf("%d %d",&ratio,&index)==2 && scanf("%c",&t)==1){
        if(index > 0 && ratio!=0){
            if(flag==0)
                flag=1;
            else
                cout<<" ";
            cout<<ratio*index<<" "<<index-1;
        }
        if((index==1 || index==0) && ratio==0){
            if(flag==0)
                flag=1;
            else
                cout<<" ";
            cout<<0<<" "<<0;
        }
        if(t=='\n')
            break;
    }
    if(flag==0)
        cout<<"0 0";
    return 0;
}

代码(Java)

package b1010;
import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int ratio;  //系数
        int index;  //指数
        boolean flag=false;
        while(in.hasNextInt()) {   //判断是否还有下一个输入 
            ratio = in.nextInt();
            index = in.nextInt();
             if(index > 0 && ratio!=0){
                 if(flag)
                     System.out.print(" ");
                 else
                     flag=true;
                 System.out.print(ratio*index +" "+(index-1)); 
             }
             if((index==1 || index==0) && ratio==0) {
                 if(flag)
                     System.out.print(" ");
                 else
                     flag=true;
                 System.out.print("0 0"); 
             }
        }
        if(!flag)
            System.out.print("0 0"); 
    }
}