C 解一元一次方程
阿新 • • 發佈:2018-11-02
在方程中,只包含整數、小寫字母及+、-、=這3個符號。方程中沒有括號,也沒有除號,方程中的小寫字母表示未知數。保證輸入的一元一次方程均為合法的,且有唯一的實數解。
#include <stdlib.h> #include <stdio.h> #include <string.h> #include <conio.h> int numSum = 0, xSum = 0; int isRight = 0; void eval(char *numBuff, int isX) { int num = atoi(numBuff); if (isX) { if (num == 0) num = 1; if (isRight > 0) xSum -= num; else xSum += num; } else { if (isRight > 0) numSum += num; else numSum -= num; } memset(numBuff, 0, 80); //清空陣列 } int main() { char exp[80] = { "6a-5+1=2-2a" }; char xVarName; char numBuff[80] = { 0 }; for (unsigned int i = 0; i < strlen(exp); i++) { if ((exp[i] >= '0' && exp[i] <= '9') || (exp[i] == '+') || (exp[i] == '-')) { if ((exp[i] == '+') || (exp[i] == '-')) eval(numBuff, 0); //快取中的數輸出 strncat(numBuff, &exp[i], 1); } else if (exp[i] == '=') { eval(numBuff, 0); isRight = 1; } else { xVarName = exp[i]; eval(numBuff, 1); } } eval(numBuff, 0); printf("%s\r\n", exp); printf("%c=%.3f\r\n", xVarName, (float)numSum / (float)xSum); printf("%d : %d", numSum, xSum); }