1+2+…+n

时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
题目描述
求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
思路:
利用短路求值的方法

C语言的逻辑操作符 && , || 具有 短路求值 的特性.

逻辑与 &&
&& 操作符的左操作数总是首先进行求值, 如果它的值为真, 则继续计算右操作数的值, 然后执行与操作得到表达式结果; 如果它的值为假, 根据与操作 有假则假 的性质可以断定该表达式的值为假, 所以不再计算右操作数的值.
表达式:expression1&& expression2
上述代码中,当判断false之后便知与的结果肯定是false了,因此后面的expression2便不再执行。因此a仍然为1。

逻辑或 ||
|| 操作符的左操作数也是首先进行求值, 如果它的值为假, 则继续计算右操作数的值, 然后执行与操作得到表达式结果; 如果它的值为真, 根据或操作 有真则真 的性质可以断定该表达式的值为真, 所以不再计算右操作数的值.
表达式:expression1 ||expression2
当expression1为true时,后面的expression2不再运行。因此上述代码中判断了true之后,后面的a=0语句不再执行,因此a的值仍为1。

因此可利用短路&&来实现if的功能,使用递归来实现循环while的功能

class Solution {
public:
    int Sum_Solution(int n) {
        int sum = n;
        bool flag = (sum>0)&& ((sum += Sum_Solution(n-1))>0);
        return sum;
    }
};

原文链接: https://www.cnblogs.com/whiteBear/p/12636112.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    1+2+...+n

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/340157

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月2日 上午12:27
下一篇 2023年3月2日 上午12:27

相关推荐