1010. 一元多项式求导 (25)
原题: https://www.patest.cn/contests/pat-b-practise/1010
实现思路: 首先多项式的存储直接用数组, 读数的时候需注意, 按照题目的描述
我们需要, 当输入为'\n'时结束读数, 所以这里需要用到getchar
, 求导比较简单
i每次循环加2, 按照要求存放即可.
#include <stdio.h>
// input: 3 4 -5 2 6 1 -2 0
// output: 12 3 -10 1 6 0
int main () {
int source[1100]; // 原多项式, 下标0不存东西
int res[1100]; // 结果多相似, 下标0不存东西
int slen = 0; // 原多项式长度, 指向最后一个元素
int rlen = 0; // 结果多项式长度, 指向最后一个元素
int si = 1;
int ri = 1;
int i;
char isEnter = 'x'; // 初始任意非\n字符, 靠它实现, 按回车结束循环
char ch = ' '; // 打印控制字符
// 读数
while (isEnter != '\n') {
scanf("%d", &source[si]);
slen = slen + 1;
si = si + 1;
isEnter = getchar();
}
// 求导
// 指数为0, 该项直接不用看了
// 因为题目中说了, 输入是按照指数递降的方式, 那么
// 常数项, 只可能在最后, 所以首先检查下最后一项是不是0,
// 如果是0, 直接删掉, 也就是长度-2
if (source[slen] == 0) {
slen = slen - 2;
}
// 根据题目的含义, 输入不可能出现0 0, 但输出可能会出现
if (slen == 0) {
printf("0 0\n");
}
// 循环每次+2
for (i=1; i<=slen; i+=2) {
res[ri] = source[i] * source[i + 1]; // 系数
ri = ri + 1;
res[ri] = source[i + 1] - 1; // 指数
ri = ri + 1;
rlen = rlen + 2; // 指数和系数都添加一次, 总长+2
}
for (i=1; i<=rlen; i++) {
if (i == rlen) {
ch = '\n';
}
printf("%d%c", res[i], ch);
}
return 0;
}
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步