Javascript多功能计算器

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<HTML>
<HEAD>
<TITLE>多功能计算器</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<SCRIPT language=JavaScript>
// 最大公约数
function gcd(a, b)
{
	while (b)
	{
		var t = a % b;
		a = b;
		b = t;
	}
	return a;
}
// 配平化学方程式
function Balance(s)
{
	var A = [];				// 系数矩阵
	var E = [];				// 元素数组
	var M = s.match(/.+?(\+|=|$)/g);	// 物质数组
	var R = /(?:([A-Z][a-z]?)|\))(\d*)|./g;	// 分析化学式的正则表达式
	// $1 = [A-Z][a-z]?			// 元素
	// $2 = \d*				// 系数
	var e, m, a = 0, b = 1, n, t;		// 循环及临时变量

	for (m = 0; m < M.length; m++)
	{
		while (t = R.exec(M[m]))
		{
			if (t[1])
			{
				for (e = 0; e < E.length; e++)
				{
					if (t[1] == E[e])
						break;
				}
				if (e == E.length)
				{
					E.push(t[1]);
					A.push([]);
					for (n = 0; n < M.length; n++)
						A[e].push(0);
				}
				A[e][m+a] = b * (t[2] ? t[2] : 1);
			}
			else if (t[2] && a)
			{
				n = t[2] ? t[2] : 1;
				for (e = 0; e < E.length; e++)
				{
					A[e][m+a-1] += A[e][m+a] * n;
					A[e][m+a] = 0;
				}
				a--;
			}
			else if (t[0] == "(")
			{
				a++;
			}
			else if (t[0] == "=" && b == 1)
			{
				b = -1;
			}
			else if (t[0] != "+")
				return "输入错误: 非法字符\""+t[0]+"\"";
		}
		if (a > 0)
			return "输入错误: 缺少\")\"";
	}
	if (b == 1)
		return "输入错误: 缺少\"=\"";
	if (E.length + 1 < M.length)
		return "无解: 过少元素或过多物质";
	for (m = 0; m < M.length - 1; m++) // 每一物质
	{
		if (A[m][m] == 0)
		{
			for (e = m + 1; e < E.length; e++) // 选取主行
			{
				if (A[e][m])
				{
					t = A[m];
					A[m] = A[e];
					A[e] = t;
					break;
				}
			}
			if (e == E.length)
				return "无解: 过少线性无关";
		}
		for (e = m + 1; e < E.length; e++) // 每一元素
		{
			if (A[e][m])
			{
				n = gcd(A[e][m], A[m][m]); // 通分
				a = A[e][m] / n, b = A[m][m] / n;
				for (n = m; n < M.length; n++) // 每一元素的后续项
					A[e][n] = A[e][n] * b - A[m][n] * a; // 消元
			}
		}
	}
	for (e = M.length - 1; e < E.length; e++) // 多余方程如果是线性相关的就消掉了, 消不掉则无解.
	{
		if (A[e][M.length-1])
			return "无解: 过多线性无关";
	}
	t = 1; // 最小公倍数
	for (m = M.length - 2; m >= 0; m--)
	{
		for (e = 0; e < m ; e++)
		{
			n = gcd(A[e][m], A[m][m]); // 通分
			a = A[e][m] / n, b = A[m][m] / n;
			for (n = 0; n < M.length; n++)
				A[e][n] = A[e][n] * b - A[m][n] * a; // 回代
		}
		n = A[m][m] / gcd(A[m][m], A[m][M.length-1]);
		t *= n / gcd(t, n);
	}
	t = Math.abs(t);
	for (m = 0; m < M.length - 1; m++) // 通分
	{
		n = -t * A[m][M.length-1] / A[m][m];
		if (n != 1)
			M[m] = n + M[m];
	}
	if (t != 1)
		M[M.length-1] = t + M[M.length-1];
	return M.join("");
}
// 解二次方程
function Quadratic(s)
{
	var A = s.split(/[\s,]+/);
	if (A.length != 3)
		return "输入错误";
	var a = parseFloat(A[0]);
	var b = parseFloat(A[1]);
	var c = parseFloat(A[2]);
	var d = b * b - 4 * a * c;
	if (d > 0)
		return (-b + Math.sqrt(d)) / (2 * a) + ", " + (-b - Math.sqrt(d)) / (2 * a);
	if (d == 0)
		return -b / (2 * a);
	else
		return "无解";
}
</SCRIPT>
</HEAD>
<BODY>
<CENTER>
<H2>多功能计算器</H2>
<HR color=red>
<P><INPUT style="WIDTH: 96%" name=input></INPUT></P>
<P><INPUT style="WIDTH: 96%" name=output></INPUT></P>
<P><BUTTON οnclick=with(Math)output.value=eval(input.value)>计算表达式</BUTTON> 
<BUTTON οnclick=output.value=Quadratic(input.value)>解二次方程</BUTTON> 
<BUTTON οnclick=output.value=Balance(input.value)>配平化学方程式</BUTTON></P>
<HR color=green>
<P>作者:杨文淳 QQ:1583755995 Email:YangC9@126.com</P>
</CENTER>
</BODY>
</HTML>

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,以下是一个简单的 JavaScript 计算器: ```html <!DOCTYPE html> <html> <head> <title>JavaScript Calculator</title> <style> body { background-color: #f2f2f2; font-family: Arial, sans-serif; } #calculator { background-color: #fff; border: 1px solid #ccc; border-radius: 5px; box-shadow: 0 2px 5px rgba(0,0,0,0.3); margin: 50px auto; padding: 20px; text-align: center; width: 300px; } #result { font-size: 36px; margin-bottom: 20px; } button { background-color: #4CAF50; border: none; border-radius: 5px; color: #fff; cursor: pointer; font-size: 16px; margin: 5px; padding: 10px 20px; text-align: center; text-decoration: none; display: inline-block; } button:hover { background-color: #3e8e41; } button:active { background-color: #3e8e41; box-shadow: 0 5px #666; transform: translateY(4px); } </style> </head> <body> <div id="calculator"> <div id="result"></div> <button onclick="clearDisplay()">C</button> <button onclick="appendInput('(')">(</button> <button onclick="appendInput(')')">)</button> <button onclick="appendInput('/')">÷</button> <br> <button onclick="appendInput('7')">7</button> <button onclick="appendInput('8')">8</button> <button onclick="appendInput('9')">9</button> <button onclick="appendInput('*')">x</button> <br> <button onclick="appendInput('4')">4</button> <button onclick="appendInput('5')">5</button> <button onclick="appendInput('6')">6</button> <button onclick="appendInput('-')">-</button> <br> <button onclick="appendInput('1')">1</button> <button onclick="appendInput('2')">2</button> <button onclick="appendInput('3')">3</button> <button onclick="appendInput('+')">+</button> <br> <button onclick="appendInput('0')">0</button> <button onclick="appendInput('.')">.</button> <button onclick="calculate()">=</button> </div> <script> let input = ''; const result = document.getElementById('result'); function appendInput(value) { input += value; result.innerHTML = input; } function clearDisplay() { input = ''; result.innerHTML = ''; } function calculate() { try { const answer = eval(input); result.innerHTML = answer; input = ''; } catch (error) { alert('Invalid input!'); clearDisplay(); } } </script> </body> </html> ``` 这个计算器具有基本的加、减、乘、除、括号和小数点功能。你可以在 HTML 中添加更多的按钮来扩展其功能,比如添加正弦、余弦和正切等数学函数。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值