JavaScript大位数相加减
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大位数相加减的更多相关文章
- C++ string 实现大整数相加减
随意两个大整数的加减算法.可自己主动推断正负号.代码例如以下: #include <iostream> #include <vector> #include <cstri ...
- 大整数加减运算的C语言实现
目录 大整数加减运算的C语言实现 一. 问题提出 二. 代码实现 三. 效果验证 大整数加减运算的C语言实现 标签: 大整数加减 C 一. 问题提出 培训老师给出一个题目:用C语言实现一个大整数计算器 ...
- javascript大神修炼记(1)——入门介绍
读者朋友们好,从今天开始,我将带领新朋友们,从了解javascript开始,一步一步地进阶到大神境界,别的不废话,现在开始,我们就一点一点地从入门阶段开始. 我们还是介绍一下javascript的身世 ...
- C语言关于利用sscanf实现字符串相加减
#include<stdio.h>#include<string.h>void main(){ int a; int b; char str1[10] = "9999 ...
- 华为"128为大整数相加"机试题
最近正直春招,偶尔接触到了华为的这道大整数相加的测试题,在网上找了一个算法,然后自己尝试进行了优化,最后也对memmove()函数效率有了进一步把握. #include <time.h># ...
- HDU 1002 A + B Problem II(大整数相加)
A + B Problem II Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u De ...
- java实现:将一个数各个位数相加
前面已经实现过这个程序,现在我们就不多说了,直接更改C的源码,实现这个JAVA程序. import java.util.Scanner; public class HelloWorld { publi ...
- MFC版链表实现稀疏多项式相加减
链表实现多项式运算(加减)MFC可视化版 题目 设计一个一元稀疏多项式简单计算器. 基本要求 (1)输入并建立两个多项式: (2)多项式a与b相加,建立和多项式c: (3)多项式a与b相减,建立差多项 ...
- SOJ 1002/1003/1004 大整数相加/相乘/相除
三个题目分别考察大整数相加相乘相除运算.如果按照传统算法是取一个长数组,之后进行模拟或者FFT来进行运算.但是相对繁琐. 后来昨天的青岛区域赛网赛1001,用到了JAVA的BigDecimal,于是反 ...
随机推荐
- sql 保留两位小数
select convert(decimal(18,2),1800.2669)
- Sklearn-RandomForest
在scikit-learn中,RandomForest的分类类是RandomForestClassifier,回归类是RandomForestRegressor,需要调参的参数包括两部分,第一部分是B ...
- java aop做一个接口耗时的计算
看代码: @Aspect @Component public class TimeCostAspect { private static Logger logger = LoggerFactory.g ...
- json list数据递归生成树状层级JSON
<!DOCTYPE html> <html> <head> <script> var data=[ {"id":"aaa& ...
- java字符串应用之表达式解析器
一.表达式的组成 1.数字 2.运算符:+ - / * ^ % = 3.圆括号 4.变量二.运算符优先级 由高到低分别为:+-(正负号).^.*/%.+-.= 优先 ...
- 用java实现编译器-算术表达式及其语法解析器的实现
大家在参考本节时,请先阅读以下博文,进行预热: http://blog.csdn.net/tyler_download/article/details/50708807 本节代码下载地址: http: ...
- ARM的体系结构与编程系列博客——ARM的历史与应用范围
前言 最近我感觉自己比较浮躁,重来没有好好地沉下心来做一件事情,而且针对自己在专业水平上仍然还有很多欠缺,于是我想我应该为自己做些什么来证明一下自己真的是潜心研究东西的人,于是我萌生了一个想法,真正地 ...
- JavaScript函数——预编译
四部曲 创建AO对象 找形参和变量声明,将变量和形参名作为AO属性名,值为undefined. 将实参值和形参值统一 在函数体内找函数声明,值赋予函数体. 权重按顺序依次增加.以下例子即可体现上述规则 ...
- JS数组sort比较函数
转载:http://www.cnblogs.com/ljchow/archive/2010/06/30/1768683.html 我们知道,数组的sort方法可以对数组元素进行排序,默认是按ASCII ...
- 使用C#利用cmd来调用java jar包获取其中的数据
其实也很简单,就是在C#中构建一个Process,启动jar包,并且给jar包传递参数 因为我并没有怎么学过JAVA,所以只写了个很小的Demo,就是根据传入的参数获取对应的数据 以下是JAVA De ...