今天刷题看到个有趣的解法,记录下
求 1+2+…+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
没想到还有展开选项:
由等差数列求和公式我们可以知道
1+2+⋯+n 等价于 n(n+1)/2等价于n(n+1)>>1,可以将两个数相乘用加法和位运算来模拟,循环语句,可以通过题目给的【1,10000】判断最大位数14,来手动展开
int a=n,b=n+1,ans=0;
(b&1) && (ans+=a); //b&1 取最低位
a<<=1;
b>>=1;
(b&1) && (ans+=a);
a<<=1;
b>>=1;
(b&1) && (ans+=a);
a<<=1;
b>>=1;
(b&1) && (ans+=a);
a<<=1;
b>>=1;
(b&1) && (ans+=a);
a<<=1;
b>>=1;
(b&1) && (ans+=a);
a<<=1;
b>>=1;
(b&1) && (ans+=a);
a<<=1;
b>>=1;
(b&1) && (ans+=a);
a<<=1;
b>>=1;
(b&1) && (ans+=a);
a<<=1;
b>>=1;
(b&1) && (ans+=a);
a<<=1;
b>>=1;
(b&1) && (ans+=a);
a<<=1;
b>>=1;
(b&1) && (ans+=a);
a<<=1;
b>>=1;
(b&1) && (ans+=a);
a<<=1;
b>>=1;
(b&1) && (ans+=a);
a<<=1;
b>>=1;
return ans>>1;
Accepted
35/35 cases passed (4 ms)
Your runtime beats 26.14 % of c submissions
Your memory usage beats 98.15 % of c submissions (5.2 MB)
文章介绍了一种在不允许使用乘除法、循环和条件判断语句的情况下,利用位运算计算1到n的和的方法。通过将等差数列求和公式转化为位操作,手动展开循环,实现了求和计算,并在给定范围内高效运行。
1259

被折叠的 条评论
为什么被折叠?



