<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
JavaScript
只有一種數位型別,可以使用也可以不使用小數點來書寫數位。
在 JavaScript
中,數位不分為整數型別和浮點數型別,所有的數位都是浮點數型別。JavaScript
採用 IEEE754
標準定義的 64 位浮點格式表示數位,此格式用 64 位儲存數值。其中 0~51
儲存數位片段,52~62
儲存指數,63
位儲存符號。
來看看 JavaScript
中數位的最大值和最小值:
console.log(Number.MAX_VALUE); // 1.7976931348623157e+308 console.log(Number.MIN_VALUE); // 5e-324
注:
這裡的最大值指的是字面意思上的最大值;
最小值則指的是正數情況下小數點後能表示的最小值。
思路:
大數可能會超出 JavaScript
的數位型別範圍,超出後結果損失精度,所以可以用字串的方式來儲存大數。
題解:
let a = "9876543210123456789000000000123"; let b = "1234567898765432100000012345678901"; function add(str1, str2) { // 獲取兩個數位的最大長度 let maxLength = Math.max(str1.length, str2.length); // 用0補齊長度,讓它們兩個長度相同 str1 = str1.padStart(maxLength, 0); // "0009876543210123456789000000000123" str2 = str2.padStart(maxLength, 0); // "1234567898765432100000012345678901" let temp = 0; // 每個位置相加之和 let flag = 0; // 進位:相加之和如果大於等於10,則需要進位 let result = ""; for(let i=maxLength-1; i>=0; i--) { // 獲取當前位置的相加之和:字串1 + 字串2 + 進位數位 temp = parseInt(str1[i]) + parseInt(str2[i]) + flag; // 獲取下一個進位 flag = Math.floor(temp/10); // 拼接結果字串 result = temp%10 + result; } if(flag === 1) { // 如果遍歷完成後,flag還剩1,說明兩數相加之後多了一位,類似於:95 + 10 = 105 result = "1" + result; } return result; }
給定兩個以字串形式表示的非負整數 num1
和 num2
,返回 num1
和 num2
的乘積,它們的乘積也表示為字串形式。
思路:
function multiply(str1, str2) { let result = ""; const multiplyArr = []; let count = 0; // 當前位數(從個位開始) // 用位數少的每一位去乘位數多的,這樣需要的儲存空間更小,運算速度更快 if(str1.length < str2.length) { [str1, str2] = [str2, str1]; } // 迴圈用第二個數的每一位乘以第一個數 for(let i=str2.length-1; i>=0; i--) { let multiplyItem = manyMultiplyOne(str1, str2[i]); // 獲取多位數乘單位數的結果 multiplyArr[count] = multiplyItem.padEnd(multiplyItem.length + count, "0"); // 進行補0操作 count++; } // 接下來,將multiplyArr中的每一項累加,就能得到最終的結果了 result = multiplyArr[0] // 從第一個開始累加 for(let i=1; i<multiplyArr.length; i++) { result = add(result, multiplyArr[i]); } // 去除末尾以外的前置0 result = removeLeftZero(result); return result; } /** * 多位數乘單個數 */ function manyMultiplyOne(many, one) { let temp = 0; // 每個位置相乘的結果 let flag = 0; // 進位數 let result = ""; // 進行每一位的乘法運算,並進行進位元運算(從後往前操作,代表從最小位置開始:個十百千萬) for(let i=many.length-1; i>=0; i--) { temp = many[i] * one + flag; // 獲取當前項的乘積 flag = Math.floor(temp/10); // 獲取進位數 result = temp%10 + result; } // 最後,如果進位還要剩下,則將進位放在最前面 if(flag !== 0) { result = flag + result; } return result; } // 兩數相加,用的上面介紹的函數 function add(str1, str2) { // 獲取兩個數位的最大長度 let maxLength = Math.max(str1.length, str2.length); // 用0補齊長度,讓它們兩個長度相同 str1 = str1.padStart(maxLength, 0); // "0009876543210123456789000000000123" str2 = str2.padStart(maxLength, 0); // "1234567898765432100000012345678901" let temp = 0; // 每個位置相加之和 let flag = 0; // 進位:相加之和如果大於等於10,則需要進位 let result = ""; for(let i=maxLength-1; i>=0; i--) { // 獲取當前位置的相加之和:字串1 + 字串2 + 進位數位 temp = parseInt(str1[i]) + parseInt(str2[i]) + flag; // 獲取下一個進位 flag = Math.floor(temp/10); // 拼接結果字串 result = temp%10 + result; } if(flag === 1) { // 如果遍歷完成後,flag還剩1,說明兩數相加之後多了一位,類似於:95 + 10 = 105 result = "1" + result; } return result; } function removeLeftZero(str) { let count = 0; // 計算從頭部開始,有幾個0 for(let i=0; i<str.length; i++) { if(str[i] === "0" && i < str.length - 1) { count++; } else { break; } } return str.substr(count, str.length); }
以上就是JS實現大數相加大數相乘範例詳解的詳細內容,更多關於JS大數相加相乘的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45