栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

求1+2+3+...+n(C++)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

求1+2+3+...+n(C++)

求1+2+3+…+n 描述

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

数据范围: 0 进阶: 空间复杂度 O(1),时间复杂度 O(n)

示例1
输入:
5
返回值:
15
示例2
输入:
1
返回值:
1
思路/解法 方式一

不能使用循环,则可以使用递归,那么关键在于如何终止递归,即到0时终止递归,此时我们可以使用&&的短路逻辑进行终止递归。

class Solution {
public:
    int Sum_Solution(int n) {
        //使用&&的短路逻辑,因为x&&y,如果x为false或者0时,那么会直接调用当前逻辑,即y不会执行
        n && (n += Sum_Solution(n -1));
        return n;
    }
};
方式二

根据数学知识,该题的求和公式为n*(n+1)/2,那么我们这个过程中无法使用乘法和除法,即我们可以使用内存空间(字符数组,只占一个字节)来表示我们的乘法所占空间,即如果n为5,那么我们开辟char res[n][n+1]的空间,那么对该空间sizeof(res)为30,再将其右移1位,即可得到求和大小。

class Solution {
public:
    int Sum_Solution(int n) {
        char res[n][n+1];
        return sizeof(res) >> 1;
    }
};
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/947670.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号