zoukankan      html  css  js  c++  java
  • 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;
        }
    };
    
  • 相关阅读:
    software 的魅力
    CSS中,脚本不能覆盖CSS的!!!
    取消自增ID.
    [求教]FF与IE 的Style 不兼容问题?
    SQL存储过程 之 sp_MSforeachtable和sp_MSforeachDB
    疑问:AddWebPart 不能添加动态加载的自定义控件吗?
    关于 各语言的 readonly。
    查询存储过程中的结果集.(顺便贴:一行折多行的方法)
    附一张css hack
    远程桌面dos开启
  • 原文地址:https://www.cnblogs.com/whiteBear/p/12636112.html
Copyright © 2011-2022 走看看