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>
时间: 2024-08-26 03:34:18

javascript 模拟加法的相关文章

javascript模拟post提交隐藏地址栏的参数

想要隐藏地址栏的参数,就只能用javascript模拟post提交,下面是示例代码,需要的朋友可以看看 通过js模拟post提交 1:请求需要的参数过长,超过get允许的最大长度 2:想要隐藏地址栏的参数 view source print? 01 //新创建一个form表单 02 document.write('<form name=myForm></form>');  03 var myForm=document.forms['myForm'];  04 myForm.acti

javascript模拟Windows系统下的扫雷游戏

javascript模拟Windows系统下的扫雷游戏. 说好的一周一篇随笔的,这才第三周就延迟交作业了,深深的自责中... 先玩一把 demo 很久以前写的 当时都没写注释的 刚加上了 (尼玛,好多自己都不认识了 ... ) 不足的敌方就是本来想写个游戏排名的统计的,等有空了再加上(好像每次都这么说 然后就等好久好久...) 还有就是没有实现:点击第一个格子不能是雷的功能 刚才在手机端 打开了下这篇文章 排版完全乱了... <style> ul{padding:0;list-style:no

JavaScript 模拟重载

/** * 参数个数对应 各自处理的函数 不指定 则执行 默认函数 * [ * d : function ( ) {} * , 0 : function ( ) {} * , 1 : function ( a ) {} * , 2 : function ( a, b ) {} * , 3 : function ( a, b , c ) {} * , 4 : function ( a, b , c, d ) {} * ] */ ! function () { var _reload = ( fun

【002】}链表或字符串模拟加法/加一/乘法

链表模拟加法/字符串模拟二进制加法/数组模拟加一操作/打印1到最大的n位数/字符串模拟乘法 ============================================ Add Two Numbers 两个链表代表两个数字,每个结点的值都是一位数字,单链表逆序存放这两个数字, 构造出一个新的链表,代表这两个链表的和. 链表的尾插法,头结点dummy结点的运用,统一对prev指针的操作, C++ Code 1234567891011121314151617181920212223242

javascript模拟post提交

通过js模拟post提交1:请求需要的参数过长,超过get允许的最大长度2:想要隐藏地址栏的参数 //新创建一个form表单document.write('<form name=myForm></form>');   var myForm=document.forms['myForm'];   myForm.action='runEmpAttendance';   myForm.method='POST'; var input = document.createElement('i

javascript模拟select下拉菜单

javascript模拟select下拉菜单: 由于自带的select下拉菜单确实是不够美观,并且美化的潜力也不够大,所以对外观要求比较高的网站,基本都要使用自定义的select下拉菜单,下面就提供了一个简单的例子供大家参考,代码实例如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="author" content="

javascript模拟重力感应弹跳,做个不一样的登陆端口

知识点:原生js动画效果 ,重力系统,弹跳算法, 迭代与递归, 动画序列, , 两种定时器配合使用, 循环判断注意事项 ,编程思想与解决方案思维. html代码: <div id="bg_wrap"> <div><img src="images/1.jpg" width="100%" height="100%" alt="背景图"/></div> <di

【JavaScript】吃饱了撑的系列之JavaScript模拟多线程并发

前言 最近,明学是一个火热的话题,而我,却也想当那么一回明学家,那就是,把JavaScript和多线程并发这两个八竿子打不找的东西,给硬凑了起来,还写了一个并发库concurrent-thread-js.尴尬的是,当我发现其中的不合理之处,即这个东东的应用场景究竟是什么时,我发现我已经把代码写完了. ??注意! 本文中的线程指的都是用JS异步函数模拟的“假线程”,不是真正意义上的多线程,请不要误解?? github地址 https://github.com/penghuwan/concurren

javascript模拟实现继承,继承一次父类模板和原型对象

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getS