zoukankan      html  css  js  c++  java
  • 大整数加法

    记录2种大整数加法的方法

    /**
    		 * [sumBigIntStrings 相加2个大整数]
    		 * @param  {[type]} a [description]
    		 * @param  {[type]} b [description]
    		 * @return {[type]}   [description]
    		 */
    		function sumBigIntStrings1 (a,b) {
    			var res = "",
    			    c   = 0;
    
    			a = (a +"").split(""),
    			b = (b +"").split("");
    
    			while (a.length || b.length || c) {
    				c = ~~c + ~~a.pop() + ~~b.pop();
    				res = c%10 + res;
    
    				c = c > 9;
    			}
    
    			return res;
    		}
    
    		/**
    		 * [bigIntSum 相加2个大整数]
    		 * @param  {[type]} operator1 [description]
    		 * @param  {[type]} operator2 [description]
    		 * @return {[type]}           [description]
    		 */
    		function sumBigIntStrings2 (operator1,operator2) {
    
     			if(/[^0-9]/gi.test(operator1 +""+operator2))  {
     				return;
     			}
    
    			var shortOne = operator1 + "",
    			    longOne  = operator2 + "";
    
    			// 确定长度长的和短的
    			var tmp = "";
    			if (shortOne.length > longOne.length) {
    				tmp = shortOne;
    				shortOne = longOne;
    				longOne = tmp;
    			}
    
    			// 在数组上从最后一个位相加值,进位则继续向前加
    			Array.prototype.sumKey = function (position,value) {
    				 
    				var res,
    				    left;
    
    			 	res = ~~this[position] + ~~value;
    
    			 	this[position] = res%10;
    
    			 	if(res > 9) {
    			 		return arguments.callee.call(this,position - 1,Math.floor(res/10));
    			 	}else{
    			 		return this;
    			 	}
    
    			};
    
    			var shortArr = shortOne.split(""),
    			    longArr  = longOne.split("");
    		            longArr.unshift("0");
    
    			var longLength  =  longArr.length,
    			    shortLength = shortArr.length;
    			for (var leng1 = shortLength - 1;leng1 >= 0;leng1-- ) {
    
    				longArr.sumKey(longLength - (shortLength - leng1),shortArr[leng1]);
    
    			}
    
    			return longArr.join("").replace(/^0*/,"");
    		}
    
    		var operator1 =       542341134,
    		operator2 = 649423934523456;
    
    		var res1 = sumBigIntStrings1(operator1,operator2);
    		var res2 = sumBigIntStrings2(operator1,operator2);
    		console.log("operator1: " + operator1 +"  operator2:" + operator2);
    		console.log("方法1结果:"+ res1);
    		console.log("方法2结果:"+ res2);
    

      

  • 相关阅读:
    NYoj-119-士兵杀敌(3)-RMQ算法
    springMVC3学习(九)--redirect和forward跳转
    STL
    在 Ubuntu 12.04 上通过源码安装 Open vSwitch (OVS)
    SSO 基于CAS实现单点登录 实例解析(二)
    Linux
    linux的子进程调用exec( )系列函数
    以Settings.APPLICATION_DEVELOPMENT_SETTINGS打开开发人员面板出错总结
    python学习记录
    CentOS6.X下安装配置独立SVN服务器Subversion server
  • 原文地址:https://www.cnblogs.com/alanzhang906536936/p/5444530.html
Copyright © 2011-2022 走看看