大数运算js实现
大数加法和减法是一个道理,既然我们不能实现直接相加减,我们可以利用字符串分割成字符串数组的方式。思路也非常简单,直接看代码。
function add(a,b){ var str1,str2,temp; var addFlag = 0; var max = [],min = [],res = []; str1 = a.split("").reverse();//分割字符串,并且反转 str2 = b.split("").reverse(); if (parseInt(a) >= parseInt(b)) { max = str1; min = str2; } else{ max = str2; min = str1; } for (var i = 0; i <= max.length - 1; i++) { if (i <= min.length - 1) { temp = parseInt(max[i]) + parseInt(min[i]) + addFlag; } else{ temp = parseInt(max[i]) + addFlag; } if (temp > 9) { res[i] = temp - 10; addFlag = 1; if (i == max.length - 1) { res[max.length] = 1;//如果是最后一位,要进位 } } else{ res.push(temp); addFlag = 0; } }; return res.reverse().join(""); }
减法运算道理是一样的,唯一需要做修改的是,加数顺序是无所谓的,但是减数与被减数有区别:
function sub(a,b){ var str1,str2,temp,des,r; var addFlag = 0; var max = [],min = [],res = []; str1 = a.split("").reverse();//依然分割字符串,并且翻转 str2 = b.split("").reverse(); if (parseInt(a) >= parseInt(b)) {//比较大小 max = str1; min = str2; } else{ max = str2; min = str1; des = -1;//意味着结果是负数 } for (var i = 0; i <= max.length - 1; i++) { if (i <= min.length - 1) { temp = parseInt(max[i]) - parseInt(min[i]) + addFlag; } else{ temp = parseInt(max[i]) + addFlag; } if (temp <= 0) { res[i] = temp + 10; addFlag = -1; if (i == max.length - 1) { res[max.length - 1] = "";//如果是最后一位,退位 } } else{ res.push(temp); addFlag = 0; } }; r = res.reverse().join(""); if (des == -1) {//最后再来判断符号,这是负数 return -r; } else{ return r; } }
乘法稍微就要麻烦一点了,每个位数两两相乘,最后错位相加:
function mul(a,b){ var str1,str2,temp,n; var max = [],min = [],res = []; str1 = a.split("").reverse(); str2 = b.split("").reverse(); if (str1.length > str2.length) { max = str1; min = str2; } else{ max = str2; min = str1; } for (var i = 0; i <= min.length - 1; i++) { for (var j = 0; j <= max.length - 1; j++) { res[i + j] = 0;//下面要进行递归,这里必须声明,否则是NaN } } for (var i = 0; i <= min.length - 1; i++) { for (var j = 0; j <= max.length - 1; j++) { res[i + j] += parseInt(max[j]) * parseInt(min[i]); } } var m = res.length;//这个声明不可以放在前面,否则为null for (var n = 0; n < m; n++) { if (res[n] >= 10) { if (n == m - 1) { res[n + 1] = 0; } res[n + 1] += Math.floor(res[n]/10); res[n] = res[n] % 10; } } return res.reverse().join(""); }
除法思路简单:
function chufa(a,b){ var max,min,temp; var res = []; var s = 0; if (a > b) { max = a; min = b; } else{ max = b; min = a; } if(max - min >= min){ while(max - min >= 0){ max -= min; console.log(max) s++; console.log(s) if (max - min < min) { temp = max; }; } } else{ s = 0; temp = max - min; } res[0] = s; res[1] = temp; return res.join("…"); }
我也是才开始学习js,如果有问题,希望大家能够提出,共同进步,非常谢谢。