大数运算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,如果有问题,希望大家能够提出,共同进步,非常谢谢。
浙公网安备 33010602011771号