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. TCP/IP协议栈概述及各层包头分析

    TCP/IP协议栈中各层包头的分析 Protocol列表示的是该数据包最高层对应的协议,Length列表示该包的长度(包括从底层的协议到最高层的协议,其中包头一般是,链路层14字节,IP20字节,TC ...

  2. 本地开启https的nginx配置

    下载证书和key放置在nginx配置文件同级目录下,然后添加配置内容,监听443端口,如果本地443端口被占用,可以使用其他端口测试. server { listen 443; server_name ...

  3. ZOJ 1586 QS Network(Kruskal算法求解MST)

    题目: In the planet w-503 of galaxy cgb, there is a kind of intelligent creature named QS. QScommunica ...

  4. vs2010查看quartz.net 2.1.2的源码时其中一报错的解决方法

    问题: 使用vs2010查看quartz.net 2.1.2的源码时,报错: ..\Quartz.NET-2.1.2\server\Quartz.Server\Quartz.Server.2010.c ...

  5. mac上用ssh登录服务失败的排查方法

    ssh -vvv user@ip/ traceroute ip telnet ip 22 ping

  6. C#比较两个字符串的相似度【转】

    原文地址:http://www.2cto.com/kf/201202/121170.html 我们在做数据系统的时候,经常会用到模糊搜索,但是,数据库提供的模糊搜索并不具备按照相关度进行排序的功能. ...

  7. Java常见对象之String

    String类的概述 String 类代表字符串.Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现.字符串是常量,一旦被赋值,就不能被改变. String ...

  8. Xcode 8 媒体权限

  9. 【原】spring redis 缓存注解使用

    由于最近新上的项目很多模块没有做数据缓存,大量的请求都会到数据库去查询,为了减轻数据库的压力以及提高网站响应速度,所以在这里采用了spring 提供的注解+redis实现对数据的缓存,主要针对非热点数 ...

  10. An internal error occurred during: "Updating status for Tomcat v7.0 Server at localhost..."

    tomcat启动maven工程的时候提示如下错误信息: An internal error occurred during: "Updating status for Tomcat v7.0 ...