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;
        }
    };
    
  • 相关阅读:
    Mysql入门-对表数据的增删改查
    Mysql教程-自动备份数据库
    前端基础教程-jQuery EasyUI 的EasyLoader实例
    html上标与下标应用
    git使用教程
    retrofit2.0缓存设置
    android 模拟用户点击事件
    power designer 16.5 生成mysql8.0注释
    Navicat连接Mysql8.0.11出现1251错误
    mongodb 安装配置及简单使用
  • 原文地址:https://www.cnblogs.com/whiteBear/p/12636112.html
Copyright © 2011-2022 走看看