diff --git a/src/calculator.css b/src/calculator.css
new file mode 100644
index 0000000000000000000000000000000000000000..35f8933aaea13128abcf6a64c2351eb4fc9ad0a4
--- /dev/null
+++ b/src/calculator.css
@@ -0,0 +1,64 @@
+.calculator {
+ display: block;
+ width: 290px;
+ height: 400px;
+ margin: auto;
+}
+
+.screen {
+ background-color: rgb(245, 245, 245);
+ height: 150px;
+ width: 100%;
+ font-size: 30px;
+ text-align: right;
+}
+
+.screen .prev {
+ height: 75px;
+ width: 100%;
+}
+
+.screen .current {
+ height: 75px;
+ width: 100%;
+}
+
+.buttons {
+ margin: auto;
+ width: 100%;
+}
+
+.buttons button {
+ width: 50px;
+ height: 50px;
+ margin: 9px 2px 0 1px;
+ font-size: 20px;
+ color: rgb(113, 113, 113);
+ border-radius: 10px;
+ border: none;
+ background-color: rgb(245, 245, 245);
+}
+
+.buttons .num {
+ color: black;
+}
+
+.buttons .fuction {
+ background-color: rgb(233, 240, 255);
+ color: rgb(105, 139, 242);
+}
+
+.buttons .equal {
+ float: top;
+ width: 50px;
+ height: 110px;
+ position: relative;
+ color: white;
+ background-color: rgb(59, 131, 119);
+}
+
+.buttons .short {
+ width: 230px;
+ position: relative;
+ float: left;
+}
\ No newline at end of file
diff --git a/src/calculator.html b/src/calculator.html
new file mode 100644
index 0000000000000000000000000000000000000000..aa13d05686c1327705dbb59aa843ca3ac4e38c03
--- /dev/null
+++ b/src/calculator.html
@@ -0,0 +1,72 @@
+
+
+
+
+
+
+
+ 计算器
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/calculator.js b/src/calculator.js
new file mode 100644
index 0000000000000000000000000000000000000000..dbc143a06ad33bb2bb5216549e3786a4474cb158
--- /dev/null
+++ b/src/calculator.js
@@ -0,0 +1,125 @@
+const buttonContainer = document.querySelector('.buttons');
+const prevElement = document.querySelector('.prev');
+const currentElement = document.querySelector('.current');
+var currentNumber = '',
+ prevNumber = '',
+ sign = '';
+buttonContainer.addEventListener('click', function (e) {
+ //console.log(e.target);
+ const type = e.target.dataset.type;
+ const text = e.target.textContent;
+ if (type == 'equal') {
+ calculate();
+ } else if (type == 'operate') {
+ operate(text);
+ } else if (type == 'delete') {
+ //console.log("进入判断");
+ deletenum();
+ } else if (type == 'clear') {
+ clear();
+ } else {
+ pushNumber(text);
+ }
+ updateScreen();
+});
+
+function pushNumber(num) {
+ if (num == 'e') num = Math.E;
+ if (num == 'Π') num = Math.PI;
+ currentNumber = currentNumber + num;
+}
+
+function clear() {
+ currentNumber = '';
+ prevNumber = '';
+ sign = '';
+}
+
+function deletenum() {
+ // console.log("运行函数");
+ if (currentNumber.toString().length) {
+ return currentNumber = currentNumber.toString().slice(0, -1);
+ }
+}
+
+function operate(text) {
+ var result = 0;
+ if (currentNumber == '') return;
+ //如果用户未输入数字,就输入操作符,直接return
+ sign = text;
+ prevNumber = currentNumber;
+ const prev = Number(prevNumber);
+ currentNumber = '';
+ switch (sign) {
+ case 'ln':
+ result = Math.log(prev);
+ break;
+ case 'lg':
+ result = Math.log10(prev);
+ break;
+ case 'tan':
+ result = Math.tan(prev);
+ break;
+ case 'cos':
+ result = Math.cos(prev);
+ break;
+ case 'sin':
+ result = Math.sin(prev);
+ break;
+ case '√x':
+ result = Math.sqrt(prev);
+ break;
+ case 'x^2':
+ result = Math.pow(prev, 2);
+ break;
+ case '%':
+ result = prev / 100;
+ break;
+ default:
+ return;
+ }
+ currentNumber = result.toFixed(6);
+ sign = '';
+}
+
+function calculate() {
+ var result = 0;
+ const prev = Number(prevNumber);
+ const current = Number(currentNumber);
+ switch (sign) {
+ case '+':
+ result = prev + current;
+ break;
+ case '-':
+ result = prev - current;
+ break;
+ case '×':
+ result = prev * current;
+ break;
+ case '÷':
+ result = prev / current;
+ break;
+ case 'x^y':
+ sign = '^';
+ result = Math.pow(prev, current);
+ break;
+ default:
+ return;
+ }
+ if (result % 1 == 0) {
+ currentNumber = result;
+ } else {
+ currentNumber = result.toFixed(6);
+ }
+ sign = '';
+}
+
+function updateScreen() {
+ currentElement.textContent = currentNumber;
+ //如果用户输入了操作符,那么prevNumber一定有值;
+ if (sign) {
+ prevElement.textContent = `${prevNumber} ${sign}`;
+ } else {
+ prevElement.textContent = '';
+ }
+}
\ No newline at end of file
diff --git a/src/delete/iconfont.css b/src/delete/iconfont.css
new file mode 100644
index 0000000000000000000000000000000000000000..e58baa289a65234f76cde06c9c75fcbaffd8afe0
--- /dev/null
+++ b/src/delete/iconfont.css
@@ -0,0 +1,19 @@
+@font-face {
+ font-family: "iconfont"; /* Project id 2921783 */
+ src: url('iconfont.woff2?t=1636343299487') format('woff2'),
+ url('iconfont.woff?t=1636343299487') format('woff'),
+ url('iconfont.ttf?t=1636343299487') format('truetype');
+}
+
+.iconfont {
+ font-family: "iconfont" !important;
+ font-size: 16px;
+ font-style: normal;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+.icon-shanchu:before {
+ content: "\e620";
+}
+
diff --git a/src/delete/iconfont.js b/src/delete/iconfont.js
new file mode 100644
index 0000000000000000000000000000000000000000..30977780f20b1ee2a5611fd2e0fa939d09ef2b7d
--- /dev/null
+++ b/src/delete/iconfont.js
@@ -0,0 +1 @@
+!function(e){var t,n,o,i,c,d='',a=(a=document.getElementsByTagName("script"))[a.length-1].getAttribute("data-injectcss"),l=function(e,t){t.parentNode.insertBefore(e,t)};if(a&&!e.__iconfont__svg__cssinject__){e.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(e){console&&console.log(e)}}function s(){c||(c=!0,o())}function r(){try{i.documentElement.doScroll("left")}catch(e){return void setTimeout(r,50)}s()}t=function(){var e,t;(t=document.createElement("div")).innerHTML=d,d=null,(e=t.getElementsByTagName("svg")[0])&&(e.setAttribute("aria-hidden","true"),e.style.position="absolute",e.style.width=0,e.style.height=0,e.style.overflow="hidden",t=e,(e=document.body).firstChild?l(t,e.firstChild):e.appendChild(t))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(t,0):(n=function(){document.removeEventListener("DOMContentLoaded",n,!1),t()},document.addEventListener("DOMContentLoaded",n,!1)):document.attachEvent&&(o=t,i=e.document,c=!1,r(),i.onreadystatechange=function(){"complete"==i.readyState&&(i.onreadystatechange=null,s())})}(window);
\ No newline at end of file
diff --git a/src/delete/iconfont.json b/src/delete/iconfont.json
new file mode 100644
index 0000000000000000000000000000000000000000..f9dc26b2f0879144e96aa2d88f13f9b554d6d2b6
--- /dev/null
+++ b/src/delete/iconfont.json
@@ -0,0 +1,16 @@
+{
+ "id": "2921783",
+ "name": "no name",
+ "font_family": "iconfont",
+ "css_prefix_text": "icon-",
+ "description": "",
+ "glyphs": [
+ {
+ "icon_id": "7434461",
+ "name": "删除",
+ "font_class": "shanchu",
+ "unicode": "e620",
+ "unicode_decimal": 58912
+ }
+ ]
+}
diff --git a/src/delete/iconfont.ttf b/src/delete/iconfont.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..48b4536aa1393b39d638b37ae6fd79847b50f3c6
Binary files /dev/null and b/src/delete/iconfont.ttf differ
diff --git a/src/delete/iconfont.woff b/src/delete/iconfont.woff
new file mode 100644
index 0000000000000000000000000000000000000000..b19919a052e55136c5718793e4511552c6289fd9
Binary files /dev/null and b/src/delete/iconfont.woff differ
diff --git a/src/delete/iconfont.woff2 b/src/delete/iconfont.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..4ae652acc9bf4112ed2cf193119b21a238f7a167
Binary files /dev/null and b/src/delete/iconfont.woff2 differ