九度OJ 1103二次方程式計算器

1864 ワード

タイトルの説明:
二次方程式計算機を設計する
入力:
各ケースはxに関する二次方程式式であり,単純化のために各係数は整数形式である.
出力:
各ケースは2つの実数(小さいから大きいまで出力し、中間はスペースで区切られている)を出力し、2桁の小数を保持します.解かない場合は「No Solution」を出力します.
サンプル入力:
x^2+x=3x+4

サンプル出力:
-1.24 3.24

私の考え方は、入力した方程式を標準式、すなわちax^2+bx+c=0の形式にすることです.この中には、同段階の項目を結合したり、項目を移動したりするなど、多くのステップがあります.
ここでは、等式を2つに分けて、等号を境界線として、等式の左右の両側にx^2、x、定数項の係数をそれぞれ求めて、それからそれぞれ差を作って係数a、b、cを求めます.
あとは二次方程式の公式法に従って解くだけでいいので、小数点に注意してください.
ここで係数を求める過程では,係数が複数ある場合,係数が負の場合などに注意する.
#include 
#include 
#include 
#include 
using namespace std;

void operate(string str,int &A,int &B,int &C){
	for(int i=0;i=0 && str[i-1] == '-')
					A = A - 1;
				else
					A += 1;
				i = i + 3;
			}
			else{
				if(i-1>=0 && str[i-1] == '-')
					B = B -1;
				else 
				  	B += 1;
				i = i + 1;
			}	
		}
		else{
			int temp = 0;
			int j = i;
			while(isdigit(str[i])){
				temp = temp*10 + str[i] - '0';
				i++;
			}
			if(j-1>=0 && str[j-1] == '-')
				temp = 0 - temp;   
			if(i< str.length() && str[i] == 'x'){
				if(i+1 < str.length() && str[i+1] == '^'){
					A += temp;
					i = i + 3;
				}	
				else{
					B += temp;
					i = i + 1;
				}
			}
			else
				C += temp;
		}
		
	}
}

int main(){
	string str;
	while(cin>>str){
		int j = 0;
		for(int i=0;i