编程题一元一次方程

145 阅读1分钟

public class Main {
    public static void main(String[] args) {
        System.out.println(slove("2a=a"));   // a = 0
        System.out.println(slove("c=c+1")); // 无解
        System.out.println(slove("b=b")); // 无限解
        System.out.println(slove("1+2abc=abc+3")); //abc = 2
        System.out.println(slove("2+3d-2d=5d+3")); //-4d=1
        System.out.println(slove("3d-2=5d+3")); // 2d=-5 d=-2.5
        System.out.println(slove("3d+2d-6=5d+3")); // 无解
        System.out.println(slove("-6+3d+2d=5d+3")); // 无解
        System.out.println(slove("2x + 3=7")); // x = 2
        System.out.println(slove("2x + 3=7 + 3x - 5x")); // x=1
        System.out.println(slove("2x + 3=7 - 3x - 5x")); // 10x=4
    }

    private static String slove(String s){
        int fu = 1;
        boolean denghao = false;
        boolean hasCreate = false;
        int tmp = 0;
        String left = "";
        int sum = 0;
        int sumS = 0;
        for(int i = 0; i < s.length(); i++){
            if(s.charAt(i) == ' ') continue;
            if(s.charAt(i) >= 'a' && s.charAt(i) <= 'z'){
                if(!hasCreate){
                    left += s.charAt(i);
                }
                if(i + 1 < s.length() && (s.charAt(i + 1) < 'a' || s.charAt(i + 1) > 'z')){
                    if(tmp != 0){
                        sumS += fu * tmp;
                        tmp = 0;
                    }
                    else sumS += fu;
                    hasCreate = true;
                }else if(i == s.length() - 1){
                    if(tmp != 0){
                        sumS += fu * tmp;
                        tmp = 0;
                    }
                    else sumS += fu;
                }
            }else if(s.charAt(i) == '+'){
                sum += fu * tmp;
                if(denghao) fu = -1;
                else fu = 1;
                tmp = 0;
            }else if(s.charAt(i) == '-'){
                sum += fu * tmp;
                if(denghao) fu = 1;
                else fu = -1;
                tmp = 0;
            }else if(s.charAt(i) == '='){
                denghao = true;
                sum += fu * tmp;
                fu = -1;
                tmp = 0;
            }else if(s.charAt(i) >= '0' && s.charAt(i) <= '9'){
                tmp = tmp * 10 + Integer.valueOf(s.charAt(i) - '0');
            }
        }
        // 结尾如果还有系数
        if(tmp != 0){
            sum += fu * tmp;
        }
        sum = -sum;
        if(sumS == 0 && sum != 0){
            return "方程组无解";
        }else if(sumS == 0 && sum == 0) {
            return "方程组无限解";
        }else{
            double res = (double) sum / sumS;
            return left + "=" + res;
        }
    }
}