大数运算js实现

大数加法和减法是一个道理,既然我们不能实现直接相加减,我们可以利用字符串分割成字符串数组的方式。思路也非常简单,直接看代码。

function add(a,b){
	var str1,str2,temp;
	var addFlag = 0;
	var max = [],min = [],res = [];
	str1 = a.split("").reverse();//分割字符串,并且反转
	str2 = b.split("").reverse();

	if (parseInt(a) >= parseInt(b)) {
		max = str1;
		min = str2;
	}
	else{
		max = str2;
		min = str1;
	}
	for (var i = 0; i <= max.length - 1; i++) {
		if (i <= min.length - 1) {
			temp = parseInt(max[i]) + parseInt(min[i]) + addFlag;
		}
		else{
			temp = parseInt(max[i]) + addFlag;
		}

		if (temp > 9) {
			res[i] = temp - 10;
			addFlag = 1;
			if (i == max.length - 1) {
				res[max.length] = 1;//如果是最后一位,要进位
			}
		}
		else{
			res.push(temp);
			addFlag = 0;
		}
	};
	return res.reverse().join("");
}

 

 

减法运算道理是一样的,唯一需要做修改的是,加数顺序是无所谓的,但是减数与被减数有区别:

function sub(a,b){
	var str1,str2,temp,des,r;
	var addFlag = 0;
	var max = [],min = [],res = [];
	str1 = a.split("").reverse();//依然分割字符串,并且翻转
	str2 = b.split("").reverse();

	if (parseInt(a) >= parseInt(b)) {//比较大小
		max = str1;
		min = str2;
	}
	else{
		max = str2;
		min = str1;
		des = -1;//意味着结果是负数
	}
	for (var i = 0; i <= max.length - 1; i++) {
		if (i <= min.length - 1) {
			temp = parseInt(max[i]) - parseInt(min[i]) + addFlag;
		}
		else{
			temp = parseInt(max[i]) + addFlag;
		}

		if (temp <= 0) {
			res[i] = temp + 10;
			addFlag = -1;
			if (i == max.length - 1) {
				res[max.length - 1] = "";//如果是最后一位,退位
			}
		}
		else{
			res.push(temp);
			addFlag = 0;
		}
	};
	r = res.reverse().join("");
	if (des == -1) {//最后再来判断符号,这是负数
		return -r;
	}
	else{
		return r;
	}
}

 

 

乘法稍微就要麻烦一点了,每个位数两两相乘,最后错位相加:

function mul(a,b){
	var str1,str2,temp,n;
	var max = [],min = [],res = [];
	str1 = a.split("").reverse();
	str2 = b.split("").reverse();
	

	if (str1.length > str2.length) {
		max = str1;
		min = str2;
	}
	else{
		max = str2;
		min = str1;
	}

	for (var i = 0; i <= min.length - 1; i++) {
		for (var j = 0; j <= max.length - 1; j++) {
			res[i + j] = 0;//下面要进行递归,这里必须声明,否则是NaN
		}
	}

	for (var i = 0; i <= min.length - 1; i++) {
		for (var j = 0; j <= max.length - 1; j++) {
			res[i + j] += parseInt(max[j]) * parseInt(min[i]);
		}
	}
	var m = res.length;//这个声明不可以放在前面,否则为null
	for (var n = 0; n < m; n++) {
		if (res[n] >= 10) {
			if (n == m - 1) {
				res[n + 1] = 0;
			}
			res[n + 1] += Math.floor(res[n]/10); 
			res[n] = res[n] % 10;	
		}
	}
	return res.reverse().join("");
}  

 

 

除法思路简单:

function chufa(a,b){
	var max,min,temp;
	var res = [];
	var s = 0;
	if (a > b) {
		max = a;
		min = b;
	}
	else{
		max = b;
		min = a;
	}
	if(max - min >= min){
		while(max - min >= 0){
			max -= min;
			console.log(max)
			s++;
			console.log(s)
			if (max - min < min) {
				temp = max;
			};
		}
	}
	else{
		s = 0;
		temp = max - min;
	}
	res[0] = s;
	res[1] = temp;
	return res.join("…");

} 

 

  

我也是才开始学习js,如果有问题,希望大家能够提出,共同进步,非常谢谢。  

posted on 2015-08-23 14:26  心若向阳  阅读(1720)  评论(0编辑  收藏  举报

导航