实现两个超过正整数最大值的加和运算(js)

要求: 实现两个超过最大正整数的加和运算,输入输出都为字符串

/*********

* a: 超过Infinity 的字符串类型的值

* b: 超过Infinity 的字符串类型的值

* result : 结果的字符串类型的表示

*********/
eg:

functin add(a, b){

  ......

}

<script type="text/javascript">
	function add(a, b) {
		if(!a || !b) {
			throw Error(‘input invalid‘);
		}

		// state center
		let aString = a.trim();
		let bString = b.trim()
		let maxLength = getMaxLength(aString, bString);
		let temp = 0;
		let array = [];

		aString = aString.padStart(maxLength, ‘0‘);
		bString = bString.padStart(maxLength, ‘0‘);

		let aArray = aString.split(‘‘);
		let bArray = bString.split(‘‘);

		for(var i = maxLength-1; i >= 0; i-- ) {
			let count = toNumberAdd(aArray[i], bArray[i]);
			let tempResult = getSplit(count);
			let subTemp = Number(tempResult[1]) + Number(temp);

			if(subTemp >= 10){
				let subResult = getSplit(subTemp);

				array[i] = Number(tempResult[1]) + Number(temp) + Number(subResult[1]);
				temp = tempResult[0] + subResult[0];

			}else {
				array[i] = subTemp;
				temp = tempResult[0];
			}

		}

		return temp == ‘1‘ ? temp + array.join(‘‘) : array.join(‘‘);
	}

	function getMaxLength(a, b) {
		let alength = a.trim().length;
		let blength =  b.trim().length;

		return Math.max(alength, blength);
	}

	function toNumberAdd(a,b) {
		return Number(a) + Number(b);
	}

	function getSplit(number) {
		let result = String(number/10);

		let a = result.split(‘.‘)[0];
		let b = result.split(‘.‘)[1] ? result.split(‘.‘)[1] : 0;

		return [a,b];
	}

	console.log(‘result is : ‘, add(‘11‘, ‘89‘));
</script>

  

原文地址:https://www.cnblogs.com/frontend-coder/p/10642803.html

时间: 2024-10-24 10:13:32

实现两个超过正整数最大值的加和运算(js)的相关文章

1、两人做游戏,轮流报数,报出的数只能是1、2、3、4、5、6、7、8其中之一,把两个人报出的数连加起来,谁报数后加起来的和是123,谁就获胜,让你先报,为了确保胜利,你第一个数报多少?

看到一道奥数题,如下 两人做游戏,轮流报数,报出的数只能是1.2.3.4.5.6.7.8其中之一,把两个人报出的数连加起来,谁报数后加起来的和是123,谁就获胜,让你先报,为了确保胜利,你第一个数报多少? 看了网上一些答案,觉得不太好理解,下面说说自己的解题思路. 首先用123去除9,得到商为13余数为6.   于是我们可以先报6然后让此后每一轮的大家报数的和为9. 这样可以保证最后一轮中对方无论报什么数都无法让总数到达123,因为到了最后一轮时,若用123去减此前所有报数之和肯定为9.这时,对

CSS超过指定的宽度加省略号

/*table-layout:fixed 会使表格均等分*/ #TreeView1 table { width:290px; table-layout: fixed; } #TreeView1 td:first-child { width:8%; } /*+选择下一个兄弟节点 注意+前后都有空格*/ #TreeView1 td:first-child + td { width:6%; } /*[attribute]含有某个属性的元素*/ #TreeView1 td[class] { width:

asp.net MVC发布iis无法加载css,js和图片

今天真够郁闷的,遇到了在本地能运行的项目到了iis服务器那里就不行了,无法加载css,js和图片,这里说清楚一下先,关于asp.net 的MVC中这样的情况其实不少,但是之前遇到的是在visual studio运行的时候就已经不能加载css和js文件,那种情况一般都是路径的问题,改下页面代码就行,网上教程不少,而这个其实是一个CMS的开源系统.Orchard,国庆实在无聊,就想玩下这个asp.net MVC框架的CMS,而且是微软推荐的开源CMS,提到了就来说说这个吧,和国内的其他CMS对比起来

模块化加载require.js

一.为什么要用require.js? 最早的时候,所有Javascript代码都写在一个文件里面,只要加载这一个文件就够了.后来,代码越来越多,一个文件不够了,必须分成多个文件,依次加载.下面的网页代码,相信很多人都见过. <script src="1.js"></script> <script src="2.js"></script> <script src="3.js"></s

linux date 加减运算

在linux shell编程中,经常用到日期的加减运算 查看时间: [[email protected] ~]# date Fri Sep  2 13:12:56 CST 2016 修改时间: [[email protected] ~]# date -s "1980-01-01 00:00:00" Tue Jan  1 00:00:00 CST 1980 其实date命令本身提供了日期的加减运算 非常方便.例如:得到昨天的时间date +%Y%m%d --date="-1 d

dojo实现加载新版本js库

使用dojo后一直纠结js文件内容有更新时如何加载,这两天终于把问题解决了,原来想加一个库文件代替dojo相应的函数,但发现dojo库纠緾得太紧了,就在原文件上改. 加载分两种情况一种dojo.text!加载或不用执行代码,另外一个是作为库加载,这两个要分开处理. 第一种是直接在加载的url后面加入版本号"?v=xxx". toUrl = req.toUrl = function(name, referenceModule){ var moduleInfo = getModuleInf

js模块化/js模块加载器/js模块打包器

之前对这几个概念一直记得很模糊,也无法用自己的语言表达出来,今天看了大神的文章,尝试根据自己的理解总结一下,算是一篇读后感. 大神的文章:http://www.css88.com/archives/7628(大神的文章写的很详细,建议先看完大神的文章) 一.js模块化 什么是js模块化,我们从历史说起. 1.一开始我们怎么写脚本?就是在html文件中用<script></script>写代码 这种方式的缺点:代码复用靠复制,基本是全局变量. 2.后来我们用js文件写代码,用<

处理页面加载图片js(等比例压缩图片)

第一页面html  <div class="admin">${answer.content}</div> <div class="adminss">${answer.content}</div> 第二循环压缩${answer.content}内容中的大图片 <script> jQuery(function(){ setTimeout('imgLoad()'1000)//延长加载一分钟 }); functio

浮点加减运算中左规右规问题

当尾数用二进制表示时,浮点规格化的定义是尾数M应满足:  1/2   ≤  |M|<1 显然对于正数而言,有M = 00.1φφ-φ:对于负数,其补码形式为11.0φφ-φ(即-0.0*******,左归).这样,当进行补码浮点加减运算时,只要对运算结果的符号位和小数点后的第一位进行比较:如果它们不等,即为00.1φφ-φ或11.1φφ-φ,就是规格化的数:如果它们相等,即为00.0φφ-φ或11.0φφ-φ,就不是规格化的数,在这种情况下需要尾数左移以实现规格化的过程,叫做向左规格化.规则是: