题目
时间限制
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");
}
}