求1+2+3+...+n你真的做的到吗?

有这样一道C/C++题:求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。

还有多少种解法?对于这个问题限制了我们常用的求解方式,目的是想让我们另辟蹊径。那么我们只有硬着头皮找各种方式来应对此题,下面为大家带来几个来自网友们的方法,供我们共同学习:

1、利用了&&的短路特性:即当&&(与)的左边为假时整个表达式为假,右边的不用再计算了;下边附上解决代码:

class Solution {
public :
     int Sum_Solution( int   n) {
         int sum = n;
         sum && (sum += Sum_Solution(n - 1));
         return sum;
     }
};
1)利用逻辑与的短路特性实现递归终止。 
2) 当n== 0 时,   sum && (sum += Sum_Solution(n - 1)) 只执行前面的判断,为 false ,然后直接返回 0
3) 当n> 0 时,执行sum+=Sum_Solution(n- 1 ),实现递归计算Sum_Solution(n)。
2、用公式是不可以的,公式里有乘法!!实现乘法可以用sizeof多维数组,
class Solution {
public :
     int Sum_Solution( int n) {
         bool a[n][n+1];
         return sizeof (a)>>1;
     }
};
3、当有人说用公式不可以的时候,别人果断的用其他方式利用了公式,而且只需要一行(惊呆):
class Solution {
    public :int Sum_Solution(int n) {
       
 return  ( (int) (.pow(n, 2)+n))>>1;    
    }
}
4、 用异常退出递归
public class Solution {
    public int Sum_Solution(int n) {
        return sum(n);
    }
    int sum(int n){
        try{
            int i = 1%n;
            return n+sum(n-1);
        }
        catch(Exception e){
            return 0;
        }
    }
}
5、 先取对数再指数算回去。
class Solution {
public:
    int Sum_Solution(int n) {
        //return n*(n+1)/2;
        return multi(n, n + 1) >> 1;
    }
    int multi(int a, int b){
        // we can guarantee that both a and b is positive integers
        int res = int(pow(10, log10(a) + log10(b))+0.5);
        return res;
    }
};
先奉上这些,当然方法还有很多种,有待我们挖掘。。。。不说了,我也要赶紧学习去了 微笑 奋斗



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

C-Jonn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值