两大数相乘 -- javascript 实现
(function (){
var addLarge = function(n1,n2){
var carry = 0;
var ret = "";
n1=n1.toString();
n2=n2.toString();
var len = Math.min(n1.length,n2.length);
var sln1 = n1.substr(n1.length - len,n1.length );
var sln2 = n2.substr(n2.length - len,n2.length );
for(var i = len;i > 0; i--)
{
var di = parseInt(sln1[i-1]);
var dj = parseInt(sln2[i-1]);
ret = (carry + di + dj)>= 10 ? ((carry + di + dj) - 10 + ret) : ((carry+di+dj) + ret);
carry = ((carry + di + dj) /10 ) | 0;
}
if(n1.length != n2.length)
{
if(n1.length > n2.length){
ret = addLarge(n1.substr(0,n1.length-len),carry.toString()) + ret;
}
else{
ret = addLarge(n2.substr(0,n2.length - len),carry.toString()) + ret;
}
return ret;
}
else{
if(carry> 0){
ret = carry+ ret;
}
return ret.toString();
}
};
var multiply = function(n1,n2){
var nstr1 = n1.toString();
var nstr2 = n2.toString();
var carry = 0;
var ret = "";
var di = 0;
var dj = 0;
var dig = "";
for(var i = nstr1.length - 1 ;i >= 0;i--)
{
var tmp = "";
var di = parseInt(nstr1[i]) ;
for(var j = nstr2.length - 1;j >= 0;j--)
{
var dj = parseInt(nstr2[j]);
var r = di*dj + carry;
if(r >= 10) {
carry =(r / 10) | 0;
tmp = (r%10) + tmp;
}else{
carry=0;
tmp = r + tmp;
}
}
if(carry > 0){
tmp = carry.toString() + tmp;
carry = 0;
}
if(i < nstr1.length -1)
{
ret = addLarge (ret ,tmp + dig);
}
else{
ret = tmp;
}
dig += "0";
}
return ret;
};
var a = "1543843275857859592482498432243255";
var b = "1554335546546546662";
console.log(multiply(a,b));
console.log(parseInt(a)*parseInt(b));
})();
两大数相乘 -- javascript 实现的更多相关文章
- 两个大数相乘-Java
两个字符串表示两个非常大的数,请设计算法计算这两个大数的乘积,结果用字符串表示.例如S1="7832974972840919321747983209327",S2="19 ...
- 大数相乘算法C++版
#include <iostream> #include <cstring> using namespace std; #define null 0 #define MAXN ...
- java版大数相乘
在搞ACM的时候遇到大数相乘的问题,在网上找了一下,看到了一个c++版本的 http://blog.csdn.net/jianzhibeihang/article/details/4948267 用j ...
- Linux C/C++ 编程练手 --- 大数相加和大数相乘
最近写了一个大数相乘和相加的程序,结果看起来是对的.不过期间的效率可能不是最好的,有些地方也是临时为了解决问题而直接写出来的. 可以大概说一下相乘和相加的解决思路(当然,大数操作基本就是两个字符串的操 ...
- Karatsuba乘法--实现大数相乘
Karatsuba乘法 Karatsuba乘法是一种快速乘法.此算法在1960年由Anatolii Alexeevitch Karatsuba 提出,并于1962年得以发表.此算法主要用于两个大数相乘 ...
- Java 大数相乘、大数相加、大数相减
思路来源:: https://blog.csdn.net/lichong_87/article/details/6860329 /** * @date 2018/6/22 * @description ...
- 华为上机测试题(大数相乘-java)
PS:这个不是自己写的,测试OK,供参考. /** * 大数相乘 */ public class BigData { public static void main(String[] args) { ...
- 1051:A × B problem 大数相乘
给你两个整数,请你计算A × B. 输入 数据的第一行是整数T(1 ≤ T ≤ 20),代表测试数据的组数.接着有T组数据,每组数据只有一行,包括两个非负整数A和B.但A和B非常大,Redraimen ...
- 大数相乘(牛客网ac通过)
2019-05-172019-05-17 大数相乘基本思想: 相乘相加,只不过大于10先不进位到计算完后统一进位 #include <iostream> #include <stri ...
随机推荐
- 07 mongodb
mongodb mongodb简介 简介 MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为Web应用提供可扩展的高性能数据存储解决方案. MongoDB是一个介于关系数据 ...
- LeetCode(34)Search for a Range
题目 Given a sorted array of integers, find the starting and ending position of a given target value. ...
- [AI开发]基于DeepStream的视频结构化解决方案
视频结构化的定义 利用深度学习技术实时分析视频中有价值的内容,并输出结构化数据.相比数据库中每条结构化数据记录,视频.图片.音频等属于非结构化数据,计算机程序不能直接识别非结构化数据,因此需要先将这些 ...
- mysql汉字转拼音函数
-- 创建汉字拼音对照临时表 CREATE TABLE IF NOT EXISTS `t_base_pinyin` ( `pin_yin_` ) CHARACTER SET gbk NOT NULL, ...
- XV内存变化
- HDU 4641
动态更新后缀自动机,每次不断依据当前添加的节点不断往前寻找父节点上字符串最多可出现的次数 这里为了减少运算,当父节点已经达到k次就不在往前寻找,因为之前的必然达到k次,也已经统计在内 #include ...
- POJ 1486 Sorting Slides【二分图匹配】
题目大意:有n张幻灯片和n个数字,幻灯片放置有重叠,每个数字隶属于一个幻灯片,现在问你能够确定多少数字一定属于某个幻灯片 思路:上次刷过二分图的必须点后这题思路就显然了 做一次二分匹配后将当前匹配的边 ...
- 【POJ3254】Corn Fields(状压DP)
题意: 一个M x N矩阵里有很多格子,每个格子有两种状态,可以放牧和不可以放牧,可以放牧用1表示,否则用0表示,在这块牧场放牛,要求两个相邻的方格不能同时放牛,即牛与牛不能相邻.问有多少种放牛方案( ...
- java多线程调试
1. 多线程调试 https://blog.csdn.net/bramzhu/article/details/52367052 https://www.jb51.net/article/129632. ...
- 进程Queue、线程Queue、堆栈、生产者消费者模型
没学队列之前,可以用文件实现进程之间通信 但是有2个问题: 1. 速度慢:文件是保存在硬盘空间 2. 为了数据安全要加锁(处理锁是一件很麻烦的事,容易死锁,建议自己轻易不要处理锁) 队列:队列是基于管 ...