⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 3341003_ac_188ms_2100k.java

📁 北大大牛代码 1240道题的原代码 超级权威
💻 JAVA
字号:
import java.util.*;

public class Main 
{

	/**
	 * @param args
	 */
	public static void main(String[] args) 
	{
		new Main().run();
	}

	class Expression
	{
		int c0, c1;
	}
	
	String exp;
	int pointer;
	
	public void run()
	{
		Scanner in = new Scanner (System.in);
		int cas = 1;
		
		while (in.hasNext())
		{
			exp = in.next();
			System.out.println("Equation #"+(cas++));
			solve();
		}
	}
	
	public Expression parseFactor()
	{
		Expression e = new Expression();
		
		if (exp.charAt(pointer)=='x')
		{
			pointer++;
			e.c0 = 0;
			e.c1 = 1;
		}
		else
		{
			if (exp.charAt(pointer)=='(')
			{
				pointer++;
				e = parseExpression();
				pointer++;
			}
			else
			{
				e.c0 = 0;
				e.c1 = 0;
				while (pointer < exp.length() && Character.isDigit(exp.charAt(pointer)))
				{
					e.c0 = 10*e.c0 + (int)(exp.charAt(pointer++)-'0');
				}
			}
		}
		return e;
	}
	
	public Expression parseTerm()
	{
		Expression factor = new Expression();
		
		factor = parseFactor();
		while (pointer < exp.length() && exp.charAt(pointer)=='*')
		{
			pointer++;
			Expression tmp = new Expression();
			tmp = parseFactor();
			factor.c1 = factor.c1*tmp.c0 + factor.c0*tmp.c1;
			factor.c0 = factor.c0 * tmp.c0;
		}
		return factor;
	}
	
	public Expression parseExpression()
	{
		Expression term = new Expression();
		
		term = parseTerm();
		while (pointer < exp.length() && (exp.charAt(pointer)=='+'||exp.charAt(pointer)=='-'))
		{			
			if (exp.charAt(pointer)=='+')
			{
				pointer++;
				Expression tmp = new Expression();
				tmp = parseTerm();
				term.c0 += tmp.c0;
				term.c1 += tmp.c1;
			}
			else
			{
				pointer++;
				Expression tmp = new Expression();
				tmp = parseTerm();
				term.c0 -= tmp.c0;
				term.c1 -= tmp.c1;
			}
		}
		return term;
	}
	
	public void solve()
	{
		Expression left = new Expression();
		Expression right = new Expression();
	
		pointer = 0;
		left = parseExpression();
		pointer++;
		right = parseExpression();
		
		if (left.c1==right.c1)
		{
			if (left.c0==right.c0)
			{
				System.out.println("Infinitely many solutions.");
			}
			else
			{
				System.out.println("No solution.");
			}
		}
		else
		{
			double a, b;
			
			a = left.c0 - right.c0;
			b = right.c1 - left.c1;
			System.out.printf("x = %f\n", a / b);
		}
		System.out.println();
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -