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,于是反 ...
随机推荐
- android即时通信开源项目信息
源码提供!Android即时通讯和sns开源项目汇总 http://www.jianshu.com/p/b2ca52337fe5
- tomcat启动(三)Catalina分析-load方法分析
load()方法按从上到下顺序分析(主要分析本人所没学过的知识点,其它略过...). Digester类作用 使用sax技术对xml进行解析 未开始解析时Digester.push(this)这个用来 ...
- maven 中 jar管理
慢慢补充 将本地jar添加到maven的仓库中 mvn install:install-file -DgroupId=org.geotools -DartifactId=gt-swing -Dvers ...
- SpringBoot入门 (四) 数据库访问之JdbcTemplate
本文记录在SpringBoot中使用JdbcTemplate访问数据库. 一 JDBC回顾 最早是在上学时接触的使用JDBC访问数据库,主要有以下几个步骤: 1 加载驱动 Class.forName( ...
- tomcat与jboss等容器的区别
1.JBoss 是 J2EE 应用服务器,而 Tomcat 只是一个 Servlet 容器,或者说是一个简单的 J2EE 应用服务器. JBoss 中的 Servlet 容器还是 Tomcat. 与 ...
- SparkSQL简介
1.SparkSQL的发展历程 1.1 Hive and Shark SparkSQL的前身是Shark,给熟悉RDBMS但又不理解MapReduce的技术人员提供快速上手的工具,Hive应运而生,它 ...
- TFS Negotiate方式登录的IIS配置
使用vsts-agent连接到tfs(tfs2017)配置代理客户端,可以通过PAT.Negotiate.Integrated.Alternate四种方式登录.(参考) 默认情况下,采用Negotia ...
- C# 代码占用的空间
是不是代码会占用空间,如果一个程序初始化需要 100M 的代码,那么在他初始化之后,这些代码就没有作用了,他会不会占空间?本文经过测试发现,代码也是会占空间. 我写了2k个垃圾类代码,然后把他放在一个 ...
- MQ疑难杂症小记
为什么使用消息队列? 什么业务场景,这个业务场景有个什么技术挑战,如果不用MQ可能会很麻烦,但是你现在用了MQ之后带给了你很多的好处.消息队列的常见使用场景,其实场景有很多,但是比较核心的有3个:解耦 ...
- Java Swing实战(一)JFrame和JTabbedPane容器
概述: 项目是一个桌面程序,涉及标签和按钮组件.布局管理器组件.面板组件.列表框和下拉框组件等组件,以及Swing事件处理机制. 下面先从最基础的界面开始. /** * @author: lishua ...