第一个数据为什么是-0

#include <bits/stdc++.h>

int main()

{

char lv[300],rv[300];//左右式子

double COEF[3]={};

scanf("%[^=]=%s",lv,rv);//输入左右两边

char symb[2],coef[5],degre[4];

int x,y,z;

//处理左边

while (strlen(lv))

{

symb[0]=coef[0]=degre[0]=0;

sscanf(lv,"%[+-]",symb);//输入符号

sprintf(lv,"%s",lv+(symb[0]!=0));//更新

sscanf(lv,"%[0123456789]",coef);//输入系数

sprintf(lv,"%s",lv+strlen(coef));//更新

sscanf(lv,"%[x^2]",degre);//输入x的次数的表达式

sprintf(lv,"%s",lv+strlen(degre));//更新

x=(symb[0]==0||symb[0]=='+')? 1 : -1 ;//处理符号

if (!coef[0]){coef[0]='1';coef[1]=0;}

sscanf(coef,"%d",&y);//处理系数

switch (strlen(degre))

{

case 0:

z=0;

break;

case 1:

z=1;

break;

default:

z=2;

}

COEF[z]+=x*y;

}

while (strlen(rv))

{

symb[0]=coef[0]=degre[0]=0;

sscanf(rv,"%[+-]",symb);//输入符号

sprintf(rv,"%s",rv+(symb[0]!=0));//更新

sscanf(rv,"%[0123456789]",coef);//输入系数

sprintf(rv,"%s",rv+strlen(coef));//更新

sscanf(rv,"%[x^2]",degre);//输入x的次数的表达式

sprintf(rv,"%s",rv+strlen(degre));//更新

x=(symb[0]==0||symb[0]=='+')? 1 : -1 ;//处理符号

if (!coef[0]){coef[0]='1';coef[1]=0;}

sscanf(coef,"%d",&y);//处理系数

switch (strlen(degre))

{

case 0:

z=0;

break;

case 1:

z=1;

break;

default:

z=2;

}

COEF[z]-=x*y;

}

double delta=COEF[1]*COEF[1]-4*COEF[2]*COEF[0];

//计算Delta的值

if (COEF[2]==0)//如果是1次方程

{

if (COEF[1]==0)

{

if (COEF[0]==0) printf("181818181818\n");

else printf("0\n");

}

else

{

printf("1\n%.5f\n",-COEF[0]/COEF[1]);

}

}

else//那么就是二次方程

{

if (delta>0)

{

double s1=(-COEF[1]+sqrt(delta))/(2*COEF[2]),s2=(-COEF[1]-sqrt(delta))/(2*COEF[2]);

s1>s2?(s1=s1+s2,s2=s1-s2,s1=s1-s2):0;

printf("2\n%.5f %.5f\n",s1,s2);

}

else if (delta==0)

{

printf("1\n%.5f\n",(-COEF[1])/(2*COEF[2]));

}

else

{

printf("0\n");

}

}

return 0;

}
//求大神帮忙看下

0 条评论

目前还没有评论...

信息

ID
1646
难度
8
分类
字符串 | 表达式处理其他 | 数学 点击显示
标签
递交数
1999
已通过
264
通过率
13%
被复制
2
上传者