设计函数求一元多项式的导数。(注:xn(n为整数)的一阶导数为n*xn-1。)
输入格式:以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。
输出格式:以与输入相同的格式输出导数多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。注意“零多项式”的指数和系数都是0,但是表示为“0 0”。
输入样例:
3 4 -5 2 6 1 -2 0
输出样例:
12 3 -10 1 6 0
解题要点:
1.这题关键在于:单独的零次项输出也为0 0;如果零次项之前有其他的,则不用输出
例如 输入:2 0 输出:0 0
输入:6 4 2 0 输出:24 3
2.如何退出循环?因为有负数,所以用getchar()比较麻烦。因为OJ系统是用文件流输入数据,所以流最后会有EOF标志,可用这个判断退出循环。
#include <iostream>
using namespace std;
int main()
{
int n, e, flag = 0;
while (cin>>n>>e) //当遇到EOF时表达式返回0,跳出循环。有关输入EOF返回值问题详见https://blog.youkuaiyun.com/qq_34228570/article/details/79673995
{
if( n*e )
{
if(flag)
printf(" ");
else
flag = 1;
printf("%d %d", n*e, e-1);
}
}
if(!flag) printf("0 0"); //如果只有零次项,输出“0 0”
return 0;
} return 0;
}
或
#include <stdio.h>
#include <string.h>
int main()
{
int n, e, flag = 0;
while (scanf("%d", &n) != EOF)
{
if( n*e )
{
if(flag)
printf(" ");
else
flag = 1;
printf("%d %d", n*e, e-1);
}
}
if(!flag) printf("0 0");
return 0;
}
或
#include <iostream>
using namespace std;
int main()
{
int n, e, flag = 0;
while (1)
{ scanf("%d%d",&n,&e);
if( n*e )
{
if(flag)
printf(" ");
else
flag = 1;
printf("%d %d", n*e, e-1);
}
if(getchar()=='\n')break;
}
if(!flag) printf("0 0"); //如果只有零次项,输出“0 0”
return 0;
}