求导(模拟)

在这里插入图片描述
思路:
每一段都可看成 +/- ax^b
正负号单独看
四种情况:
ax^b
ax
x
a

该项输出不输出就看a,b的值

只有a == 0 || b == 0 时不输出,其它情况下都输出

PS:数据卡int

代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e6+110;
char s[maxn];
int main()
{
	scanf("%s",s+1);
	int la=strlen(s+1);printf("f'(x)=");
	int l=6;
	if(s[l]!='-')	s[5]='+',l--;
	int f=0,shu=0,g=0,fx=0;
	ll a=0,b=0;
	for(int i=l;i<=la;i++)
	{
		if(s[i]=='+')		f=1;
		else if(s[i]=='-')	f=0;
		else
		{
			a=0,b=0,g=0,fx=0;
			for(int j=i;j<=la;j++)
			{
				if(s[j]>='0'&&s[j]<='9')
				{
					if(fx==0)
					{
						g=1;//x的左边有值 
						a=a*10+s[j]-'0';
					}	
					else
						b=b*10+s[j]-'0'; 
				}
				else if(s[j]=='x'||s[j]=='^')
					fx=1;
				if(s[j+1]=='+'||s[j+1]=='-'||s[j+1]=='\0')
				{	
					if(g==0)	a=1;
					if(b==0&&fx==1)	b=1;//存在x,右边不存在 
					i=j;
					break;
				}
			}
			if(a==0||b==0);//肯定有输出 
			else
			{
				if(f==1)
				{
					if(shu==0);
					else
						printf("+");
				}
				if(f==0)
					printf("-");	
				shu=1;
				printf("%lld",a*b);
				if(b==1)	continue;
				printf("x");
				if(b>=3)
				printf("^%lld",b-1);
			}
		}
	}
	if(shu==0)	printf("0");
	printf("\n");
	return 0;
}
/*
f(x)=x^4-3x^2-x+1
f'(x)=4x^3-6x-1
f(x)=-1x^10+0x^6-3x^2+x-1
f'(x)=-10x^9-6x+1
f(x)=-x^10+0x^6-3x^2+x-1
f'(x)=-10x^9-6x+1
f(x)=1
f'(x)=0
f(x)=-1000x^1
f'(x)=-1000
*/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值