洛谷2378 因式分解 字符串

洛谷2378 因式分解 字符串

简单好玩的字符串处理小水题~~

 

(话说自从我写完那道配平化学方程式的字符串处理+解方程题,碰到这种题就越发的兴奋了 =、=)

数据

这个题数据比较友好, 最多最多会给你一个二次三项式 进行因式分解  -> 即变成(x+a)(x+b)形式

不就是 -> 一般式转两根式嘛

处理完字符串直接带入公式解一元二次方程即可    当然还要注意很多很多小细节

代码

#include<bits/stdc++.h>
using namespace std;
char s[128];
long long i,len,a,b,c;
int get(){
    int sum=0,t=1;
    if(s[i]=='+')t=1;
    else if(s[i]=='-')t=-1;
    i++;
    while(s[i]>='0'&&s[i]<='9')sum=sum*10+s[i++]-'0';
    if(sum==0)return 1*t;
    return sum*t;
} 
int main()
{
    scanf("%s",s);
    len=strlen(s);
    if(s[1]!='^'||len==1||len==3){
        printf("%s\n",s);
        return 0;
    }
    a=1;
    i=3;
    b=get();
    if(s[i]!='x')c=b,b=0;
    i++;
    if(len>i)c=get();
    long long x1=(sqrt(b*b-4*a*c)-b)/2/a,
        x2=(-sqrt(b*b-4*a*c)-b)/2/a;
    x1=-x1,x2=-x2;
    if(x1<x2)swap(x1,x2);
//    printf("%d %d %d %d %d",a,b,c,x1,x2);
    if(x1==x2){
        if(x1>0)printf("(x+%d)^2",x1);
        else printf("(x%d)^2",x1);
    }
    else{
        if(x1>0)printf("(x+%d)",x1);    
        else if(x1<0) printf("(x%d)",x1);
        else printf("x");
        if(x2>0)printf("(x+%d)",x2);    
        else if(x2<0)printf("(x%d)",x2);
        else printf("x");
    }
    printf("\n");
    return 0;
}  

 

posted @ 2017-10-19 20:57  Elfish?  阅读(260)  评论(0编辑  收藏  举报