jzoj4803-[NOIP2016提高A组模拟9.28]求导【模拟】

正题


题目大意

求一个标准多项式的求导
jzoj4803-[NOIP2016提高A组模拟9.28]求导【模拟】_第1张图片


解题思路

暴力模拟即可,注意细节即可
一下是贴心的坑爹细节样例
( 233 + x ) − > ( 1 ) 而 不 是 ( + 1 ) (233+x)->(1)而不是(+1) (233+x)>(1)(+1)
( 1 ) − > ( 0 ) 而 不 是 ( ) (1)->(0)而不是() (1)>(0)()


c o d e code code

#include
#include
#include
#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');
} 

你可能感兴趣的:(模拟)