首页 > 代码库 > javascript 模拟加法

javascript 模拟加法

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript">
(function AddBigInt(x,y){
	function iiAdd(a,b){
		var x,y,z,c;
		(typeof a =="number")?(x=a):(x=parseInt(a));
		(typeof b =="number")?(y=b):(x=parseInt(b));
		z=x+y;
		z>=10?(c=[1,z-10]):(c=[0,z]);
		return c;
	}
	var xL=x.length, yL=y.length;
	var xI=xL-yL,dI,tarA=[],cStr;
	var jwI=0;
	if(xI==0){
		dI=xL;
		for (var i = 0; i < dI; i++) {
			var i1=dI-i-1;
			var jiHe1 = parseInt(x.charAt(i1))+parseInt(y.charAt(i1)),
				jiHe=jiHe1+"";

			if(jiHe1>=10){
				if(!!jwI){
					tarA.unshift(parseInt(jiHe.charAt(1))+jwI);
				}else{
					tarA.unshift(parseInt(jiHe.charAt(1)));
				}
				jwI = parseInt(jiHe.charAt(0));
			}else{
				var add1 = iiAdd(parseInt(jiHe.charAt(0)),jwI);
				if(!!jwI){
					tarA.unshift(add1[1]);
					jwI=add1[0];
				}else{
					tarA.unshift(parseInt(jiHe));
					jwI=0;
				}
			}
		}
		if(!!jwI){
			tarA.unshift(jwI);
		}
		console.log(tarA);
		return tarA;
	}else if(xI>0){
		var cArr=[],dyJwI=0;
		cStr=x.slice(0,xI);
		for (var j = 0; j < xI; j++) {
			cArr.unshift(parseInt(cStr.charAt(j)));
		}
		dI=yL;
		for (var i = 0; i < dI; i++) {
			var i1=dI-i-1,ix1=xL-i-1;
			var jiHe1 = parseInt(x.charAt(ix1))+parseInt(y.charAt(i1)),
				jiHe=jiHe1+"";

			if(jiHe1>=10){
				if(!!jwI){
					tarA.unshift(parseInt(jiHe.charAt(1))+jwI);
				}else{
					tarA.unshift(parseInt(jiHe.charAt(1)));
				}
				jwI = parseInt(jiHe.charAt(0));
			}else{
				var add1 = iiAdd(parseInt(jiHe.charAt(0)),jwI);
				if(!!jwI){
					tarA.unshift(add1[1]);
					jwI=add1[0];
				}else{
					tarA.unshift(parseInt(jiHe));
					jwI=0;
				}
			}
		}
		if(!!jwI){
			dyJwI = jwI;
			for (var k = xI; k > 0; k--) {
				var dyXAdd = iiAdd(cArr[k-1],dyJwI);
				cArr[k-1] = dyXAdd[1];
				dyJwI = dyXAdd[0];
				if(!dyXAdd[0])break;
			}
		}
		(!!dyJwI)?cArr.unshift(dyJwI):"";
		console.log(cArr);
		console.log(tarA);
		console.log(cArr.concat(tarA));
		return cArr.concat(tarA);
	}else if(xI< 0){
		var xI1 = 0 - xI;
		var cArr=[],dyJwI=0;
		cStr=y.slice(0,xI1);
		for (var j = 0; j < xI1; j++) {
			cArr.unshift(parseInt(cStr.charAt(j)));
		}
		cArr=cArr.reverse();
		dI=xL;
		for (var i = 0; i < dI; i++) {
			var i1=dI-i-1,iy1=yL-i-1;
			var jiHe1 = parseInt(x.charAt(i1))+parseInt(y.charAt(iy1)),
				jiHe=jiHe1+"";

			if(jiHe1>=10){
				if(!!jwI){
					tarA.unshift(parseInt(jiHe.charAt(1))+jwI);
				}else{
					tarA.unshift(parseInt(jiHe.charAt(1)));
				}
				jwI = parseInt(jiHe.charAt(0));
			}else{
				var add1 = iiAdd(parseInt(jiHe.charAt(0)),jwI);
				if(!!jwI){
					tarA.unshift(add1[1]);
					jwI=add1[0];
				}else{
					tarA.unshift(parseInt(jiHe));
					jwI=0;
				}
			}
		}
		if(!!jwI){
			dyJwI = jwI;
			for (var k = xI1; k > 0; k--) {
				var dyXAdd = iiAdd(cArr[k-1],dyJwI);
				cArr[k-1] = dyXAdd[1];
				dyJwI = dyXAdd[0];
				if(!dyXAdd[0])break;
			}
			(!!dyJwI)?cArr.unshift(dyJwI):"";
		}
		console.log(cArr);
		console.log(tarA);
		console.log(cArr.concat(tarA));
		return cArr.concat(tarA);
	}
})("77778","211999922222")
/*
"11111","22222"
"111111","22222"
"22222","111111"
"22222","77778"
"999922222","77778"
"77778","999922222"
"77778","211999922222"
*/
</script>
</head>
<body>
</body>
</html>


本文出自 “11236531” 博客,请务必保留此出处http://11246531.blog.51cto.com/11236531/1868223

javascript 模拟加法