▶注意:
这不是一个基本的"如何在JavaScript中添加数字"问题
请在downvoting之前仔细阅读问题
我知道使用+
符号进行添加的替代方法是执行以下操作:
int add(int a, int b)
{
if(b == 0)
return sum;
sum = a ^ b;
carry = (a & b) << 1;
return add(sum,carry);
}
但我有两个问题:
^
&
<<
,但我不知道如何在JavaScript中开始寻找它们,因为我不知道他们叫什么
我应该用什么谷歌搜索?我试着用JavaScript编写这个...但似乎我错过了一些东西
var getSum = function(a, b) {
return (a ^ b, (a & b) << 1)
};
答案 0 :(得分:12)
我们将使用bitwise operators并使用recursion
我们在资源很少的情况下使用此方法read more when to use this method!
var getSum = function(a, b) {
if (b == 0) {
return a;
} else {
return getSum(a ^ b, (a & b) << 1)
}
};
@PatrickRoberts建议的ES6单线解决方案
const getSum = (a,b) => b ? getSum(a ^ b, (a & b) << 1) : a;
另一种解决方案:
2-数组技术Array.prototype.fill()
const getSum = (a, b) => {
const firstArr = new Array(a).fill(true);
const secondArr = new Array(b).fill(true);
return firstArr.concat(secondArr).length
}
3-解决方法use加号without writing it:
const getSum = (a, b) => eval(''.concat(a).concat(String.fromCharCode(0x2B)).concat(b));
答案 1 :(得分:3)
好吧,我正在回答标题中清楚描述的问题。没有+
和没有-
操作正确..?然而......不是按位而是用纯数学应该是我认为的有效答案。
var x = 1,
y = 2,
sum = Math.log2(2**x * 2**y);
console.log(sum);
答案 2 :(得分:2)
const add = (a, b) => new Function('a', 'b', `return ${a} ${String.fromCharCode(43)} ${b}`)(a, b);
答案 3 :(得分:1)
我们可以使用while循环实现相同的功能。我们必须将进位向左移动,并将其添加到二进制数的总和中,直到没有进位。 (因为我们遵循的做法是在小数点后加。)
function getSum(a, b){
while(b!=0){
var carry = a&b; //calculate if is there any carry we need to add
a = a^b; // a is used to hold the sum
b = carry<<1; //b is used to hold left shift carry
}
return a;
}
document.write(getSum(7, 5))
答案 4 :(得分:0)
可以使用数组结构来执行求和运算。
<tr *ngFor="let plans of PlanList; let index" (click)="lastClicked = index" [ngClass]="{'btn-success': index == lastClicked}" >
<td class="text-primary">{{plans.typename}} </td>
<td><a (click)="criticalSelect(...)" class="btn btn-primary text-white">${{plans.plan1}}</a></td>
<td><a (click)="criticalSelect(...)" class="btn btn-primary text-white">${{plans.plan2}}</a></td>
<td><a (click)="criticalSelect(...)" class="btn btn-primary text-white">${{plans.plan3}}</a></td>
<td><a (click)="criticalSelect(...)" class="btn btn-primary text-white">${{plans.plan4}}</a></td>
</tr>
每个输入都被强制转换为一个数组,例如,一个值为 5 的输入将被强制转换为一个包含 5 个元素的数组。在强制两个输入后,数组被连接成一个数组。返回最终数组的长度,通过除以100处理十进制值之和。
现在,让我们尝试防范无效输入情况,例如 function getSum(a, b){
return Array(a).concat(Array(b)).length / 100;
}
或虚假值。
strings
答案 5 :(得分:-1)
与@PatrickRoberts建议的方法相同,但没有递归:
const add = (a, b) => {
let c;
while (a !== 0) {
c = b & a;
b = b ^ a;
c = c << 1;
a = c;
}
return b;
};