1. 程式人生 > >JS計算兩個數字之和演算法

JS計算兩個數字之和演算法

問題:計算兩個數字的和?

分析:眾所周知,Number型別的值有個上限,如果是兩個極大的數字相加求和,便不能使用最簡單的+方法,可以將兩個數字當成字串去處理,從最末尾開始相加,注意遞進的位數,最後得到相加的字串

實現:

//引數a、b均為字串正整數,求和
function add(a, b){
	var aLen = a.length,
		bLen = b.length,
		maxLen = aLen - bLen >= 0 ? aLen : bLen,
		num = 0,		//向上位數遞級
		str = '';
	for(var i = 1; i <= maxLen; i++){
		var aVal = aLen - i >= 0 ? parseInt(a.charAt(aLen - i)) : 0,
			bVal = bLen - i >= 0 ? parseInt(b.charAt(bLen - i)) : 0,
			bitVal = 0,
			addVal = aVal + bVal + num;
		if(addVal >= 10){
			num = parseInt(addVal / 10);
			bitVal = addVal % 10;
		}else{
			num = 0;
			bitVal = addVal;
		}
		str += bitVal;
	}
	return Array.prototype.reduceRight.call(str, function(a, b){return a + b;});
}
第二種方式,遞迴演算法
function add(a, b){
	var aArr = a.split('').reverse(),
		bArr = b.split('').reverse();
	return (function addStep(aArr, bArr, str, num){
		var aVal = aArr.length === 0 ? 0 : parseInt(aArr.shift()),
			bVal = bArr.length === 0 ? 0 : parseInt(bArr.shift()),
			num = num || 0,
			bitVal = 0,
			addVal = aVal + bVal + num,
			str = str || '';
		if(addVal >= 10){
			num = parseInt(addVal / 10);
			bitVal = addVal % 10;
		}else{
			num = 0;
			bitVal = addVal;
		}
		str += bitVal;
		if(aArr.length === 0 && bArr.length === 0){
			console.log(Array.prototype.reduceRight.call(str, function(a, b){return a + b;}));
		}else{
			addStep(aArr, bArr, str, num);
		}
	})(aArr, bArr, '', 0)
}

相關推薦

JS計算數字之和演算法

問題:計算兩個數字的和? 分析:眾所周知,Number型別的值有個上限,如果是兩個極大的數字相加求和,便不能使用最簡單的+方法,可以將兩個數字當成字串去處理,從最末尾開始相加,注意遞進的位數,最後得到相加的字串 實現: //引數a、b均為字串正整數,求和 function

計算數字之間的額偶數和

數字 ctype doctype || isnan tle res har 是否 <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title></

js計算矩形相交

utf char Y軸 lang cli epo ava log function <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8" /> <

快速找出一個數組中的數字,讓這數字之和等於一個給定的值

http 知識 繼續 進一步 repl 有一個 tails 窮舉 too 我覺得寫得很清晰,希望沒有侵犯作者的著作權,原文地址http://blog.csdn.net/hackbuteer1/article/details/6699642 快速找出一個數組中的兩個數字,讓這

js 計算時間戳之間相隔天數

時間戳 sta var color pre div 天數 code class var start=1491789600000;//2017-4-10 10:00 var end=1494381600000;//2017-5-10 10:00 var utc=end-

JS判斷數字的大小,注意要先解析成數字

例如: var sfje00=""; //收費金額 var knye00=""; //卡內餘額 function testmoney(){ if(sfje00>knye00} alert("卡內餘額不足,請充值"); }else{ pay(); }

js比較數字的大小不能直接比

錯誤寫法: var minMoney = $("#minMoney").val(); var maxMoney = $("#maxMoney").val(); if (maxMoney)<= minMoney) { pt.alertInfo("最大金額必須大於最小金額");

js計算日期的天數差值

函數 ber parseint pre days var 毫秒 cti param js計算兩個日期的天數差值 通過兩個日期計算這兩個日期之間的天數差值 /** * 計算天數差的函數,通用 * @param sDate1 * @param sDate2 * @ret

js計算時間戳的時間差,並轉換為:幾天幾時幾分

function sj() {             //功能:計算兩個時間之間相差多少個小時                 var date = '2013-08-30 16:55:49:173';             date = date.substring(0

js數字相加卻得到字串的問題

我在js中定義了兩個var 的變數,他們都是通過$(“#xxx”).val()的方式獲取到的,儘管我在定義var時初始化為0,但將這兩個變數相加後依然得到了將兩個數字拼在一起的字串,相減的話就不會這樣。 解決辦法: 在獲取val()進行賦值的時候,主動轉換為物件 Number 例:

js計算日期差

function timeDifc(start,end){ let starts = new Date(start),ends = new Date(end),message = ''; if (starts.getTime() > ends.getTime())

php 找出一個數組中的數字,讓這數字之和等於一個給定的值

有關於php的有好幾種思路,很多部落格都有我就不一一介紹了,只是貼程式碼僅供參考。 問題:給一個一維陣列,不確定具體有多少元素,例如$arr = [1,2,3,4,3,2,1],讓他們任意兩數字相加的和等於一個給定的值,比如說 5 ,可能有好幾個兩個數相加都是5,但只是取最

程式設計師面試題:快速找出一個數組中的數字,讓這數字之和等於一個給定的值

能否快速找出一個數組中的兩個數字,讓這兩個數字之和等於一個給定的值,為了簡化起見,我們假設這個陣列中肯定存在至少一組符合要求的解。 假如有如下的兩個陣列,如圖所示: 5,6,1,4,7,9,8 給定Sum= 10 1,5,6,7,8,9 給定Sum=

js 計算時間的時間差

寫在前面: 如題,就像題目說的需要計算出時間差,雖然不太難,但這個需求經常會在專案中遇到的,我在這邊做一下整理,希望能夠儘量全的整理出來。有需要的朋友可以做一下參考,喜歡的可以點波贊,或者關注一下,希望可以幫到大家。 計算時間差原理: getT

JS 比較數字大小時候的注意!

當要比較兩個數字變數大小的時候,一定要以做減法的形式進行比較!因為有可能你從HTML中得到的就是字串形式的數字! var num1 = '10'; var num2 = '20'; if(num1-n

js計算日期相差的天數

<script type="text/javascript">   function  btnCount_Click(){       var cdate = new Date();         var ddate = new Date(Date.pars

JS比較數字的大小

一般情況下:if(2 > 10){  alert("不正確!");} 此比較不會是想要的結果:它相當於2 >1,把10的第一位取出來比較。 解決方法:if(eval(2) > eval(10)){alert("不正確!");}  eval()函式用於在不引用任何特定物件的情況下計算程

JS計算日期之間的天數

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xh

js數字的比較

js中的var定義的變數預設是字串,如果單純的比較字串的話,會出現錯誤,需要先轉化為int型別在做比較。 【備註:110和18在你寫的程式中是18大的,因為 這兩個數都是字串,而1和1相等之後比較1和

Java 計算日期相差年數字、月數、天數及時分秒

import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import org.apache.log4j.Logger;