【JZOJ4803】求导【模拟】
题目大意:
题目链接:https://jzoj.net/senior/#main/show/4803
输出多项式求导后的多项式。
思路:
就是一道**模拟题啊。
和次项展开式一样。乱搞一下就行了。
注意细节!!
代码:
#include <cstdio>
#include <string>
#include <cstring>
using namespace std;
typedef long long ll;
const int N=100010;
int len;
ll a,b;
char ch[N],c,f;
bool flag;
ll read(int &i)
{
ll d=0;
while (isdigit(ch[i]))
d=(d<<3)+(d<<1)+ch[i]-48,i++;
return d;
}
int main()
{
freopen("equation.in","r",stdin);
freopen("equation.out","w",stdout);
scanf("%s",ch+1);
len=strlen(ch+1);
for (int i=1;i<=len;)
{
if (isdigit(ch[i])) a=read(i);
else a=1;
if (ch[i]>='a'&&ch[i]<='z') c=ch[i],i++;
else
{
f=ch[i],i++;
continue;
}
if (ch[i]=='^') i++;
if (isdigit(ch[i])) b=read(i);
else b=1;
if (!b||!a) continue;
if (f!='\000'&&(f=='-'||flag)) putchar(f);
f='\000';
flag=1;
printf("%lld",a*b);
if (b>1) putchar(c);
if (b>2) putchar('^'),printf("%lld",b-1);
if (i<=len) f=ch[i],i++;
}
if (!flag) putchar(48);
return 0;
}