设计函数求一元多项式的导数。(注:xn(n为整数)的一阶导数为nxn?1。)
以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过 1000 的整数)。数字间以空格分隔。
以与输入相同的格式输出导数多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。注意“零多项式”的指数和系数都是 0,但是表示为 0 0
。
3 4 -5 2 6 1 -2 0
12 3 -10 1 6 0
#include<stdio.h>
int main(){
int a[1010] = {0};
int k, e, count = 0;
while(scanf("%d%d", &k, &e) != EOF){
a[e] = k;
}
a[0] = 0;//指数为0的就是常数项,常数项求导直接为0
for(int i = 1; i<=1000;i++){//从一次项开始枚举
a[i-1] = a[i] * i;//求导公式
a[i] = 0;//在求导之后,当前系数必须清空为0,否则后面可能无法被覆盖,所以这句不能省
if(a[i-1] != 0) count ++;//count计数不为0的导数项的个数
}
if(count == 0) printf("0 0");//特判
else{
for(int i = 1000; i >= 0; i--){
if(a[i] != 0){
printf("%d %d", a[i], i);
count--;
if(count != 0) printf(" ");
}
}
}
return 0;
}
分析:
#include<iostream>
using namespace std;
int main(){
int a, b, falg = 0;
while(cin >> a >> b){
if(b != 0){//如果b==0那么就不会进入这个循环,即只有常数项系数,那么falg就不会为1
if(flag == 1) cout << "";
cout << a * b << " " << b - 1;
falg = 1;
}
}
if(falg == 0) cout << "0 0";
}
原文:https://www.cnblogs.com/shiff/p/15050096.html