JS一个算法题
题目:实现超出整数存储范围的两个大整数想加function(a,b)。注意:参数a和b以及函数返回值都是字符串。
目的:考算法, 基本逻辑。
我实现的基本思路是:
①两个数字字符串长度补成一样,用字符串'0’补位,比如 a='1111',b='22',b用'0'补位成='0022'.
②分3中情况处理,初始值的长度比较,,a的长度大于b的长度,b的长度大于a的长度,a的长度等于b的长度
③初始值的长度比较,,a的长度大于b的长度,补位比较简单,再用两个空数组push进去,push的时候都parseInt( )转换成数字,为后面好计算
④再准备个空数组,for循环 把③的两个数组里对应的索引值的值想加后的值push进这个空数组,标记数组④
⑤数组④里的值再用比较排序的原理再处理下,差不多就出来了,不废话了,直接上代码
function add(a,b){
var arr=[];
var len=a.length>b.length?a.length:(a.length<b.length?b.length:a.length);
var n=a.length>b.length?a.length-b.length:b.length-a.length;
if(a.length===b.length){
for(var i=0;i<len;i++){
arr.unshift(parseInt(a[i])+parseInt(b[i]))
}
}else{
var str='';
for(var i=0;i<n;i++){
str+='0';
}
var _this= a.length>b.length ? str+b : str+a ;
if(a.length>b.length){
for(var i=0;i<len;i++){
arr.unshift(parseInt(a[i])+parseInt(_this[i]))
}
}else{
for(var i=0;i<len;i++){
arr.unshift(parseInt(b[i])+parseInt(_this[i]))
}
}
}
for(var i=0;i<len-1;i++){
for(var j=0;j<len-1-i;j++){
if(arr[j]>=10){
var temp=arr[j]-10;
arr[j]=temp;
arr[j+1]=arr[j+1]+1;
}else{
arr[j]=arr[j];
}
}
} return arr.reverse().join('');
} var a='111';
var b='22275676575'
console.log(add(a,b))
console.log(parseInt(a)+parseInt(b))
再优化了下:
function add(a,b){
var arr=[];
var len=a.length>b.length?a.length:(a.length<b.length?b.length:a.length);
var n=a.length>b.length?a.length-b.length:b.length-a.length;
if(a.length===b.length){
for(var i=0;i<len;i++){
arr.unshift(parseInt(a[i])+parseInt(b[i]))
}
}else{
var _this= a.length>b.length ? b.padStart(len,'0') : a.padStart(len,'0') ;
if(a.length>b.length){
for(var i=0;i<len;i++){
arr.unshift(parseInt(a[i])+parseInt(_this[i]))
}
}else{
for(var i=0;i<len;i++){
arr.unshift(parseInt(b[i])+parseInt(_this[i]))
}
}
}
for(var i=0;i<len-1;i++){
for(var j=0;j<len-1-i;j++){
if(arr[j]>=10){
var temp=arr[j]-10;
arr[j]=temp;
arr[j+1]=arr[j+1]+1;
}else{
arr[j]=arr[j];
}
}
}
return arr.reverse().join('');
} var a='111';
var b='22275676575'
console.log(add(a,b))
console.log(parseInt(a)+parseInt(b))
小数精度处理方法:超小值保存 需要保存成字符串
function add(a,b){
var aStr=a.toString();
var bStr=b.toString();
var aLen=aStr.length;
var bLen=bStr.length;
var resStr=aLen>bLen?aStr:bStr;
var resLen=aLen>bLen?aLen:bLen;
var n= resLen - resStr.indexOf('.')-1;
return (a*10*n+b*10*n)/(10*n)
}
console.log(add(0.1,0.2))//0.3
console.log(add(0.1,0.00000002))//0.10000002
console.log(add(0.01,0.0000002))//0.0100002
JS一个算法题的更多相关文章
- 19道常见的JS面试算法题
最近秋招也做了多多少少的面试题,发现除了基础知识外,算法还是挺重要的.特意整理了一些常见的算法题,添加了自己的理解并实现. 除此之外,建议大家还可以刷刷<剑指offer>.此外,左神在牛客 ...
- FCC JS基础算法题(1):Factorialize a Number(计算一个整数的阶乘)
题目描述: 如果用字母n来代表一个整数,阶乘代表着所有小于或等于n的整数的乘积.阶乘通常简写成 n!例如: 5! = 1 * 2 * 3 * 4 * 5 = 120. 算法: function fac ...
- js的算法题
1.统计一个字符串中出现最多的字母 给出一个字符串,统计出现次数最多的字母.如:“wqeqwhixswiqhdxsq”,其中出现最多的是q. js算法的实现 function findMax(str) ...
- JS基础算法题(二)
1.1 数组去重的五种方法 数组去重:将数组中重复的元素去掉 JS数组没有删除具体元素的删除(只能删掉值,删不掉元素的索引),可以使用另外一个结构来进行存储 新数组 新对象 JS数组虽然本质可以删除第 ...
- FCC JS基础算法题(5):Return Largest Numbers in Arrays(找出多个数组中的最大数)
题目描述: 找出多个数组中的最大数右边大数组中包含了4个小数组,分别找到每个小数组中的最大值,然后把它们串联起来,形成一个新数组.提示:你可以用for循环来迭代数组,并通过arr[i]的方式来访问数组 ...
- FCC JS基础算法题(2):Check for Palindromes(检查回文字符串)
题目描述: 如果给定的字符串是回文,返回true,反之,返回false.如果一个字符串忽略标点符号.大小写和空格,正着读和反着读一模一样,那么这个字符串就是palindrome(回文).注意你需要去掉 ...
- FCC JS基础算法题(0):Reverse a String(翻转字符串)
题目描述: 先把字符串转化成数组,再借助数组的reverse方法翻转数组顺序,最后把数组转化成字符串.你的结果必须得是一个字符串. 算法: function reverseString(str) { ...
- JS刷算法题:二叉树
Q1.翻转二叉树(easy) 如题所示 示例: 输入: 4 / \ 2 7 / \ / \ 1 3 6 9 输出: 4 / \ 7 2 / \ / \ 9 6 3 1 来源:力扣(LeetCode) ...
- FCC JS基础算法题(4):Title Case a Sentence(句中单词首字母大写)
题目描述: 确保字符串的每个单词首字母都大写,其余部分小写.像'the'和'of'这样的连接符同理. 算法: function titleCase(str) { // 转小写及分割成数组 var st ...
随机推荐
- jQuery -> 基于当前元素的遍历
版权声明:本文为博主原创文章,转载请注明出处 https://blog.csdn.net/FeeLang/article/details/26257549 假设我们已经通过jQuery方法选中了一组元 ...
- UWA 技术分享连载 转载
技术分享连载1 Q1:Texture占用内存总是双倍,这个是我们自己的问题,还是Unity引擎的机制? Q2:我现在发现两个因素直接影响Overhead,一个是Shader的复杂度,一个是空Updat ...
- js过滤输入的emoji表情
因为emoji表情是Unicode编码, 在某些流浪器上会显示乱码, 有的数据库字节不够也无法存储, 网上有很多解决此类问题的办法, 最简单的莫过于将emoji表情替换成文本, 比如 [表情][表情] ...
- 关于fit和transform
Fit是对于数据进行拟合,所谓拟合,就是根据数据,计算获得数据里面的一些指标,比如均值,方差:下一步很多API都是需要这些参数来进行后续对数据的操作,比如下面要讲到的transform. Transf ...
- hanlp提取文本关键词的使用方法记录
本文是csu_zipple 分享的关于使用hanlp汉语言处理包提取关键词的过程一个简单的记录分享.想要使用hanlp提取文本关键词的新手朋友们可以参考学习一下! 如何在一段文本之中提取出相应的关键词 ...
- mysql57免安装版配置
1,下载mysql5.7压缩文件[具体到官网下载就行了] 2,解压并把mysql5.7放到c盘根目录下 3,进入mysql5.7主目录修改my-default.ini 重命名为:my.ini [如果没 ...
- xilinx AXI相关IP核学习
xilinx AXI相关IP核学习 1.阅读PG044 (1)AXI4‐Stream to Video Out Top‐Level Signaling Interface (2)AXI4‐Stream ...
- 《JavaScript设计模式与开发》笔记 5.关于正确写一个闭包
1.如何正确使用闭包 1.常用闭包 var asd =(function(){ var value = 0 //私有变量放入内存 return function(){ //biubiubiu 发射火箭 ...
- 跟着未名学Office - 高效工作Outlook
目录 第一篇邮件与联系人 1 第一节 使用与技巧 1 第二节 高效 11 第二篇 事务助手 21 第一节 日程管理 21 第二节 任务 ...
- 黄聪:JQUERY判断操作CHECKBOX选中、取消选中、反选、第二次无法选中的问题
用JQuery做CheckBox全选和反选的时候,遇到一个问题.当用JQ控制全选,全取消一次以后,再次点击全选,发现代码变了,但是CheckBox没有处于选中状态. $("#id" ...