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. Python -- Gui编程 -- Win32API的使用

    消息框 messageBox.py import win32api, win32con win32api.MessageBox(0, 'Hello World!', 'Come Here', win3 ...

  2. C/C++练习题(三)

    1.对下面两个文件编译后,运行会输出什么? // 第一个文件a.c #include <stdio.h> extern char p[]; extern void f(); int mai ...

  3. Chapter 3 Phenomenon——13

    "Bella, I'm so sorry!""I'm fine, Tyler — you look awful, are you all right?" “Be ...

  4. 转--log4j.properties 详解与配置步骤

    一.log4j.properties 的使用详解 1.输出级别的种类 ERROR.WARN.INFO.DEBUGERROR 为严重错误 主要是程序的错误WARN 为一般警告,比如session丢失IN ...

  5. php里的二进制安全

    二进制安全功能(binary-safe function)是指在一个二进制文件上所执行的不更改文件内容的功能或者操作.这能够保证文件不会因为某些操作而遭到损坏.二进制数据是按照一串0和 1的形式编码的 ...

  6. Smali 语法文档

    可以选择保存成pdf格式,查询起来挺方便的 if v0==0 go cond_0 if-eqz v0, :cond_0   if v0!=0 go cond_0 if-nez v0, :cond_0 ...

  7. Spark程序本地运行

    Spark程序本地运行   本次安装是在JDK安装完成的基础上进行的!  SPARK版本和hadoop版本必须对应!!! spark是基于hadoop运算的,两者有依赖关系,见下图: 前言: 1.环境 ...

  8. CSS3设置Table奇数行和偶数行样式

    table:.myTable tr:nth-child(even){ //偶数行 background:#fff;}.myTable tr:nth-child(odd){ //奇数行 backgrou ...

  9. PL/SOL csv格式导出查询结果时出现某些列的数据被四舍五入了的解决办法

    昨天用pl/sql从oracle数据库捞取数据时,发现导出的csv格式中某些列的数据被进行了四舍五入处理了,当然这些列都是纯数字的,百思不得其解,后来上网才,才得知了原因. 这并不是导出的CSV文件数 ...

  10. Spark2.3.1中用各种模式来跑官方Demo

    1  使用单机local模式提交任务 local模式也就是本地模式,也就是在本地机器上单机执行程序.使用这个模式的话,并不需要启动Hadoop集群,也不需要启动Spark集群,只要有一台机器上安装了J ...