正题
题目大意
求一个标准多项式的求导
解题思路
暴力模拟即可,注意细节即可
一下是贴心的坑爹细节样例
(233+x)−>(1)而不是(+1)(233+x)->(1)而不是(+1)(233+x)−>(1)而不是(+1)
(1)−>(0)而不是()(1)->(0)而不是()(1)−>(0)而不是()
codecodecode
#include<cstdio>
#include<algorithm>
#include<cstring>
#define ll long long
using namespace std;
ll n,num,flag,f,last,ok,read,no=1;
char s[11000];
void add_num(ll x)
{if(!x) putchar('0');if(x<0) printf("-1"),x=-x;ll w=1;while(w<=x)w*=10;w/=10;while(w)putchar(x/w+'0'),x%=w,w/=10;return;
}
int main()
{freopen("equation.in","r",stdin);freopen("equation.out","w",stdout);scanf("%s",s+1);n=strlen(s+1);for(ll i=1;i<=n;i++){if(s[i]>='0'&&s[i]<='9')read=read*10ll+s[i]-'0';else{if(s[i]=='x') ok=1,num=max(read,1ll);if(s[i]=='+'||s[i]=='-'){if(ok){last=max(read,1ll);num*=last;last--;if(f) putchar('-');else if(flag) putchar('+');flag=1;if(num!=1ll||!last) add_num(num);if(last>0ll) putchar('x');if(last>1ll) putchar('^'),add_num(last); no=0;}num=last=ok=0ll;f=(s[i]=='-');}read=0;} }if(ok){last=max(read,1ll);num*=last;last--;if(f) putchar('-');else if(flag) putchar('+');flag=1ll;if(num!=1ll||!last) add_num(num);if(last>0ll) putchar('x');if(last>1ll) putchar('^'),add_num(last);no=0;}if(no) putchar('0');
}