function arrayAdd(number, addNumber) {
var numberArr = number.toString().split('');
var addNumberArr = addNumber.toString().split('');
var temporary = []; //临时值
//比较大小长度,numberArr的值要比addNumberArr的值要大
if (addNumberArr.length > numberArr.length) {
//实现两值的调换
temporary = numberArr;
numberArr = addNumberArr;
addNumberArr = temporary;
} else if (addNumberArr.length === numberArr.length) {
//比较数组里面的值
var flag = true; //默认numberArr比addNumberArr的值大
var length = addNumberArr.length;
for (var i = 0; i < length; i++) {
var numObj = parseInt(numberArr[i]);
var addObj = parseInt(addNumberArr[i]);
if (numObj > addObj) {
break;
} else if (numObj < addObj) {
flag = false;
break;
}
}
if (!flag) {
//实现两值的调换
temporary = numberArr;
numberArr = addNumberArr;
addNumberArr = temporary;
}
} for (var i = numberArr.length - 1; i >= 0; i--) { //从后面算起
var numObj = parseInt(numberArr[i]);
var addObj = parseInt(addNumberArr[i - (numberArr.length - addNumberArr.length)]); if (!isNaN(addObj)) {
if (numObj + addObj >= 10) {
numberArr[i] = numObj + addObj - 10; if (i - 1 < 0) {
//如果是90+10的话,超出了数组的范围
numberArr.splice(0, 0, 1);
} else {
for (var j = i - 1; j >= 0; j--) { //从后面算起
var obj = parseInt(numberArr[j]);
if (obj + 1 === 10) {
numberArr[j] = 0;
if (j === 0) {
//循环到最后一个,将numberArr数组加上最前面1
// splice(position, numberOfItemsToRemove, item)
// 拼接函数(索引位置, 要删除元素的数量, 元素)
numberArr.splice(0, 0, 1);
i++; //数组的长度已经改变,将循环再次加多一次
break;
}
} else {
numberArr[j] = obj + 1;
break;
}
}
}
} else {
numberArr[i] = numObj + addObj;
}
}
}
return numberArr.join("");
} //判断大小,返回true或者false
function arrayCompare(firstNumber, sendNumber) {
var firstNumberArr = firstNumber.toString().split('');
var sendNumberArr = sendNumber.toString().split('');
//比较大小长度,firstNumberArr的值要比sendNumberArr的值要大
if (firstNumberArr.length > sendNumber.length) {
return true;
} else if (sendNumberArr.length > firstNumberArr.length) {
//实现两值的调换
return false;
} else if (sendNumberArr.length === firstNumberArr.length) {
//比较数组里面的值
var flag = true; //默认firstNumberArr比sendNumberArr的值大
var length = sendNumberArr.length;
for (var i = 0; i < length; i++) {
var numObj = parseInt(firstNumberArr[i]);
var addObj = parseInt(sendNumberArr[i]);
if (numObj > addObj) {
break;
} else if (numObj < addObj) {
flag = false;
break;
}
}
if (!flag) {
//实现两值的调换
return false;
} else {
return true;
}
}
} //startNumber是减数,endNumber是正减除数
function arrayDiff(startNumber, endNumber) {
var startNumberArr = startNumber.toString().split('');
var endNumberArr = endNumber.toString().split('');
var temporary = []; //临时值
var positiveNumber = true;//如果startNumber大于endNumber的话,就返回负值
//比较大小长度,endNumberArr 的值要比startNumberArr 的值要大
if (startNumberArr.length > endNumberArr.length) {
//实现两值的调换
temporary = endNumberArr;
endNumberArr = startNumberArr;
startNumberArr = temporary;
positiveNumber = false;
} else if (endNumberArr.length === startNumberArr.length) {
//比较数组里面的值
var flag = true; //默认endNumberArr比startNumberArr的值大
var length = startNumberArr.length;
for (var i = 0; i < length; i++) {
var endObj = parseInt(endNumberArr[i]);
var startObj = parseInt(startNumberArr[i]);
if (endObj > startObj) {
break;
} else if (endObj < startObj) {
flag = false;
break;
}
}
if (flag === false) {
//实现两值的调换
temporary = endNumberArr;
endNumberArr = startNumberArr;
startNumberArr = temporary;
positiveNumber = false;
}
} for (var i = endNumberArr.length - 1; i >= 0; i--) { //从后面算起
var endObj = parseInt(endNumberArr[i]);
var startObj = parseInt(startNumberArr[i - (endNumberArr.length - startNumberArr.length)]);
if (!isNaN(startObj)) {
if (endObj - startObj < 0) {
endNumberArr[i] = endObj + 10 - startObj;
for (var j = i - 1; j >= 0; j--) { //从后面算起
var obj = parseInt(endNumberArr[j]);
if (obj === 0) {
endNumberArr[j] = 9;
}
else {
endNumberArr[j] = obj - 1;
break;
}
}
}
else {
endNumberArr[i] = endObj - startObj;
}
}
} //判断前面是否为0,例如012,从前面算起
for (var i = 0; i < endNumberArr.length; i++) {
var obj = endNumberArr[i];
if (obj !== null) {
if (obj === 0) {
endNumberArr.splice(i, 1);
i--;
}
else {
break;
}
}
} var result = endNumberArr.join("");
if (!positiveNumber) {
result = "-" + result;
}
return result;
} //传进去的时候必须是字符串,不然会被计算机默认为number类型,从而数字发生变化
var b = arrayDiff("21111111111111118", "21111111111111119");
//alert(b);

JavaScript大位数相加减的更多相关文章

  1. C++ string 实现大整数相加减

    随意两个大整数的加减算法.可自己主动推断正负号.代码例如以下: #include <iostream> #include <vector> #include <cstri ...

  2. 大整数加减运算的C语言实现

    目录 大整数加减运算的C语言实现 一. 问题提出 二. 代码实现 三. 效果验证 大整数加减运算的C语言实现 标签: 大整数加减 C 一. 问题提出 培训老师给出一个题目:用C语言实现一个大整数计算器 ...

  3. javascript大神修炼记(1)——入门介绍

    读者朋友们好,从今天开始,我将带领新朋友们,从了解javascript开始,一步一步地进阶到大神境界,别的不废话,现在开始,我们就一点一点地从入门阶段开始. 我们还是介绍一下javascript的身世 ...

  4. C语言关于利用sscanf实现字符串相加减

    #include<stdio.h>#include<string.h>void main(){ int a; int b; char str1[10] = "9999 ...

  5. 华为"128为大整数相加"机试题

    最近正直春招,偶尔接触到了华为的这道大整数相加的测试题,在网上找了一个算法,然后自己尝试进行了优化,最后也对memmove()函数效率有了进一步把握. #include <time.h># ...

  6. HDU 1002 A + B Problem II(大整数相加)

    A + B Problem II Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u De ...

  7. java实现:将一个数各个位数相加

    前面已经实现过这个程序,现在我们就不多说了,直接更改C的源码,实现这个JAVA程序. import java.util.Scanner; public class HelloWorld { publi ...

  8. MFC版链表实现稀疏多项式相加减

    链表实现多项式运算(加减)MFC可视化版 题目 设计一个一元稀疏多项式简单计算器. 基本要求 (1)输入并建立两个多项式: (2)多项式a与b相加,建立和多项式c: (3)多项式a与b相减,建立差多项 ...

  9. SOJ 1002/1003/1004 大整数相加/相乘/相除

    三个题目分别考察大整数相加相乘相除运算.如果按照传统算法是取一个长数组,之后进行模拟或者FFT来进行运算.但是相对繁琐. 后来昨天的青岛区域赛网赛1001,用到了JAVA的BigDecimal,于是反 ...

随机推荐

  1. Maven 学习笔记(二)

    项目最近开始使用maven去管理项目啦,说真的对于maven是一窍不通啊,今天和同事在回家的路上聊天的时候同事说他去第一家公司面试的时候人家问他 maven 怎么打包,当时我就懵逼了,因为我也不知道啊 ...

  2. Chapter 3 Phenomenon——9

    "You were over there," I suddenly remembered, and his chuckle stopped short. “你之前不在这里”我突然记 ...

  3. 微服务Kong(九)——认证参考

    客户端访问上游API服务,通常由Kong的认证插件及其配置参数来控制. 通用认证 一般情况下,上游API服务都需要客户端有身份认证,且不允许错误的认证或无认证的请求通过.认证插件可以实现这一需求.这些 ...

  4. lintcode-->哈希函数

    在数据结构中,哈希函数是用来将一个字符串(或任何其他类型)转化为小于哈希表大小且大于等于零的整数.一个好的哈希函数可以尽可能少地产生冲突.一种广泛使用的哈希函数算法是使用数值33,假设任何字符串都是基 ...

  5. CentOS Maven 删除 *.lastUpdated文件

    find . -name "*.lastUpdated" -exec rm -rf {} \;

  6. Hive use mapreduce引擎 bsonFile splits报错处理

    Hive use mapreduce引擎 1.          出现报错.关于bsonFile的.禁止hdfs里面存储的bson文件自动splits. 可以在hive-site.xml文件里面添加如 ...

  7. kafka-spark streaming (一)

    Kafka-spark streaming 1.安装包 kafka安装需要zookeeper.jdk. 官网下载最新的: https://kafka.apache.org/downloads http ...

  8. elasticsearch分析系列

    http://www.opscoder.info/category/ElasticSearch/?page=2 https://www.jianshu.com/p/0908b9ee65fc https ...

  9. asp.net MVC中form提交和控制器接受form提交过来的数据

    1.cshtml页面form提交2.控制器处理表单提交数据4种方式方法1:使用传统的Request请求取值[HttpPost]public ActionResult AddNews(){    str ...

  10. 面向对象(基础oop)之垃圾回收与静态成员

    大家好,我叫李京阳,,很高兴认识大家,之所以我想开一个自己的博客,就是来把自己所了解的知识点通过自己的话写一下,希望被博客园的朋友们点评和一起讨论一下,也希望从博客园中多认识一些软件开发人员!现在我开 ...