http://ac.jobdu.com/problem.php?pid=1103
#include <stdio.h> #include <cstring> #include <cmath> static int a,b,c,symbol,left; void read_equalor(char line[]){ int len = (int) strlen(line); int i = 0,temp=0; while(i<len){ if('0'<=line[i]&& line[i] <='9' ){ temp *=10; temp += line[i] - '0'; i++; }else if((line[i] == 'x' || line[i] == 'X' ) && (i+1<len && line[i+1] == '^')) { if(temp != 0) a = a + symbol * left * temp; else a = a + symbol * left * 1; temp = 0; symbol = 1; i = i + 3; }else if(line[i] == 'x' || line[i] == 'X' ){ if(temp != 0) b = b + symbol * left * temp; else b = b + symbol * left * 1; temp = 0; symbol = 1; i++; }else if (line[i] == '+'){ if(temp != 0) c = c + symbol * left * temp; symbol = 1; temp = 0; i++; }else if(line[i] == '-'){ if(temp != 0) c = c + symbol * left * temp; symbol = -1; temp = 0; i++; }else if(line[i] == '=') { if(temp != 0) c = c + symbol * left * temp; symbol = 1; left = -1; temp = 0; i++; }else { i++; } } if(temp != 0) c = c + symbol * left * temp; } int main(){ //freopen("in/1103.in","r",stdin); char line[200]; while(gets(line) !=NULL){ symbol = 1,left = 1; a = b = c = 0; read_equalor(line); //printf("%d %d %d\n",a,b,c); double r1,r2,delta; delta = b * b - 4 * a * c; if(delta <-1e-5) printf("No Solution\n"); else{ r1 = (-b-sqrt(delta))/(2*a); r2 = (-b+sqrt(delta))/(2*a); printf("%.2lf %.2lf\n",a >0 ? r1: r2,a >0? r2:r1); } } }