记做题时犯的错
题目地址:https://pintia.cn/problem-sets/994805260223102976/problems/994805313708867584
题目描述
设计函数求一元多项式的导数。(注:x^n (n为整数)的一阶导数为nx^(n−1) 。)
输入格式
以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过 1000 的整数)。数字间以空格分隔。
输出格式
以与输入相同的格式输出导数多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。注意“零多项式”的指数和系数都是 0,但是表示为 0 0。
输入样例
3 4 -5 2 6 1 -2 0
输出样例
12 3 -10 1 6 0
错误代码
刚开始想的有点复杂,用数组来存储系数和指数,用判断指数是否为0的方式来判断输入是否结束。在每输入一组系数和指数的时候,进行导数运算后存入数组中,最后将数组中的数据一起输出,代码如下。
但是提交后,测试点1显示段错误,检查后也不知道为啥。放在这里过一段时间再来看看哪里错了。
#include <iostream>
#define MaxSize 10000
using namespace std;
int main() {
int xishu,zhishu;
int a[MaxSize];
int count = 0;
scanf("%d%d",&xishu,&zhishu);
while(zhishu != 0)
{
if(zhishu == 0)
{
a[count] = xishu * zhishu;
a[count + 1] = 0;
}
else
{
a[count] = xishu * zhishu;
a[count + 1] = zhishu - 1;
}
count += 2;
scanf("%d%d",&xishu,&zhishu);
}
if(count == 0)
{
printf("0 0");
}
else
{
int i;
for(i = 0;i < count;i ++)
{
printf("%d",a[i]);
if(i != count -1)
printf(" ");
}
}
return 0;
}
正确代码
在修改代码时突然想到,不如直接每次运算的时候就输出结果,代码通过。
#include <iostream>
using namespace std;
int main() {
int coef,exp;
int count = 0;
while(scanf("%d%d",&coef,&exp) != EOF)
{
if(exp != 0)
{
if ( count++ != 0 ) printf(" ");
printf("%d %d",coef * exp,exp - 1);
}
}
if(count == 0)
printf("0 0");
return 0;
}