第 102 题:不用加减乘除运算符,求整数的 7 倍
乘法运算相对比较慢,所以快速的方法就是将这个乘法转换成加减法和移位操作。可以将此整数先左移三位(*8)然后再减去原值:X << 3 – X。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
乘法运算相对比较慢,所以快速的方法就是将这个乘法转换成加减法和移位操作。可以将此整数先左移三位(*8)然后再减去原值:X << 3 – X。
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(22)
相当于7xn个位数
const getSum = (x) => Array.from({ length: 7 }).fill(Array.from({ length: x }, item => 1).join('')).join('').length;
function(n){
Math.abs(~eval([n<<3,~n].join("")))
}
第二个答案,一长串的是第一个答案,还有个构想是用Math.random(),但没写出来。建议写个接口,然后大数据爬出答案,return出来。
function qq(n){
var a = n;
for(var i=0;i<6;i=Math.abs(~i)){
for(var j=0;j<a;j=Math.abs(~j)){
n = Math.abs(~n)
}
}
console.log(n);
}
所有的答案这个最优秀: @Huangyanyang
突然觉得这些好有意思✈
${num}*7
)左移3位 相当于乘8 然后再减去自己 不就是7倍了吗 减法的移位运算可以转换加法的移位运算
整数: n
背景知识:
-n = ~(n-1) = ~n+1
转换方程
n*7 ==> n<<3-n ==> add(n<<3, ~n+1) ==> add(n<<3, add(~n, 1))
通用场景
不用加减乘除运算符,求整数n的m倍
这个就不难了 哈哈
var ab = [];
function seven(n,ten){
if(!n){
ten&&ten==1&&ab.unshift(1);
ten&&ten==2&&ab.unshift(2);
ten&&ten==3&&ab.unshift(3);
ten&&ten==4&&ab.unshift(4);
ten&&ten==5&&ab.unshift(5);
ten&&ten==6&&ab.unshift(6);
}
if(n[n.length-1]==0){
!ten&&ab.unshift(0)&&seven(n.slice(0,n.length-1));
ten&&ten==1&&ab.unshift(1)&&seven(n.slice(0,n.length-1));
ten&&ten==2&&ab.unshift(2)&&seven(n.slice(0,n.length-1));
ten&&ten==3&&ab.unshift(3)&&seven(n.slice(0,n.length-1));
ten&&ten==4&&ab.unshift(4)&&seven(n.slice(0,n.length-1));
ten&&ten==5&&ab.unshift(5)&&seven(n.slice(0,n.length-1));
ten&&ten==6&&ab.unshift(6)&&seven(n.slice(0,n.length-1));
}else if(n[n.length-1]==1){
!ten&&ab.unshift(7)&&seven(n.slice(0,n.length-1));
ten&&ten==1&&ab.unshift(8)&&seven(n.slice(0,n.length-1));
ten&&ten==2&&ab.unshift(9)&&seven(n.slice(0,n.length-1));
ten&&ten==3&&ab.unshift(0)&&seven(n.slice(0,n.length-1),1);
ten&&ten==4&&ab.unshift(1)&&seven(n.slice(0,n.length-1),1);
ten&&ten==5&&ab.unshift(2)&&seven(n.slice(0,n.length-1),1);
ten&&ten==6&&ab.unshift(3)&&seven(n.slice(0,n.length-1),1);
}else if(n[n.length-1]==2){
!ten&&ab.unshift(4)&&seven(n.slice(0,n.length-1),1);
ten&&ten==1&&ab.unshift(5)&&seven(n.slice(0,n.length-1),1);
ten&&ten==2&&ab.unshift(6)&&seven(n.slice(0,n.length-1),1);
ten&&ten==3&&ab.unshift(7)&&seven(n.slice(0,n.length-1),1);
ten&&ten==4&&ab.unshift(8)&&seven(n.slice(0,n.length-1),1);
ten&&ten==5&&ab.unshift(9)&&seven(n.slice(0,n.length-1),1);
ten&&ten==6&&ab.unshift(0)&&seven(n.slice(0,n.length-1),2);
}else if(n[n.length-1]==3){
!ten&&ab.unshift(1)&&seven(n.slice(0,n.length-1),2);
ten&&ten==1&&ab.unshift(2)&&seven(n.slice(0,n.length-1),2);
ten&&ten==2&&ab.unshift(3)&&seven(n.slice(0,n.length-1),2);
ten&&ten==3&&ab.unshift(4)&&seven(n.slice(0,n.length-1),2);
ten&&ten==4&&ab.unshift(5)&&seven(n.slice(0,n.length-1),2);
ten&&ten==5&&ab.unshift(6)&&seven(n.slice(0,n.length-1),2);
ten&&ten==6&&ab.unshift(7)&&seven(n.slice(0,n.length-1),2);
}else if(n[n.length-1]==4){
!ten&&ab.unshift(8)&&seven(n.slice(0,n.length-1),2);
ten&&ten==1&&ab.unshift(9)&&seven(n.slice(0,n.length-1),2);
ten&&ten==2&&ab.unshift(0)&&seven(n.slice(0,n.length-1),3);
ten&&ten==3&&ab.unshift(1)&&seven(n.slice(0,n.length-1),3);
ten&&ten==4&&ab.unshift(2)&&seven(n.slice(0,n.length-1),3);
ten&&ten==5&&ab.unshift(3)&&seven(n.slice(0,n.length-1),3);
ten&&ten==6&&ab.unshift(4)&&seven(n.slice(0,n.length-1),3);
}
}
写不下去了,我感觉在下头发都在摇曳了,胸口憋了一口闷气。
鬼才哈哈
function multiple(data){
var v = new Array(Number(data.num)+1).join('*')
var mul= data.multiple-1
console.log(v,mul)
return RegExp('^((.)(2{'+mul+'}))+$','gm').test(v)
}
multiple({
multiple:7,
num:'77'
})
秀儿 是你吗
function getNum(num, count) { return eval(new Array(count).fill(num).join('+')); } getNum(7,3) // 21 getNum(7,4) // 28 借鉴楼层 比较高明. 学习了~
''.padEnd(5, 0).replace(/0/g, ''.padEnd(7, 0)).length // 5 * 7 = 35
正则实现数学运算
仅供娱乐
You are right...
function getNum(x){ let a = Array(x << 3).fill(1);a.splice(0,x); return a.length; } console.log(getNum(2)) // 14
you used + , which is not allowed.
涨姿势
可以使用三类方式:位运算加法、JS hack、进制转换。实现方式分别如下:
贴一个自己之前发布过的这个题的解法和思路逻辑:
frontend9/fe9-library#272