当前位置: 首页 > news >正文

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

1.题目描述

求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)、位运算、递归、公式、sizeof。
习题链接:题目链接

2.题目分析

该题把我们的所有能用的方法都给限制死了,我们只能用一些的特殊的方法来做。不知道大家在思考的过程中考没考虑过C++中友元的特性和static修饰的变量的使用。

3.解题思路

我们可以定义一个类Sum,在类中定义两个静态的成员变量_i和_ret,其中_i表示n值的更新,_ret来统计累加和。通过实例化n个对象最后就可以达到_ret=1+2+3+…+n的效果。

4.代码实现

//方法一,利用友元
class Sum{
   friend class Solution; 
   //这里使Solution类成为了Sum的友元,既Solution可以调用Sum中的变量。
   //如果不使用友元类,就需要提供一种静态的方法来获取_ret的值。
public: 
	Sum()
	{
		_ret+=_i;
		++_i;
	}
private:
	static int _i;
	static int _ret;
};
int Sum::_i=1;
int Sum::_ret=0;
class Solution {
public:
    int Sum_Solution(int n) {
        Sum a[n];
        return Sum::_ret;
    }
};
//方法二、利用内部类 内部类有一特性即内部类就是外部类的友元
class Solution {
private:
    class Sum
    {
    public:
        Sum()
        {
            _ret+=_i;
            ++_i;
        }
    };
private:
    static int _i;
    static int _ret;
public:
    int Sum_Solution(int n) {
        Sum a[n];
        return _ret;
    }
};
int Solution::_i=1;
int Solution::_ret=0;

相关文章:

  • Java集成Onlyoffice以及安装和使用示例,轻松实现word、ppt、excel在线编辑功能协同操作,Docker安装Onlyoffice
  • 深度学习 二:COVID 19 Cases Prediction (Regression)
  • 03-Zookeeper客户端使用
  • Java进阶篇--网络编程
  • 【分布式云储存】Springboot微服务接入MinIO实现文件服务
  • 用go实现http服务端和请求端
  • 【数据结构】选择排序 堆排序(二)
  • POSIX
  • Flutter开发之Package与Plugin
  • 基于 SpringBoot 2.7.x 使用最新的 Elasticsearch Java API Client 之 ElasticsearchClient
  • el-menu 导航栏学习(1)
  • Linux下安装MySQL
  • 餐饮外卖配送小程序商城的作用是什么?
  • Flutter小米商城
  • 外包干了2个月,技术退步明显...
  • 【随笔记】C++ condition_variable 陷阱
  • Promise花落谁家知多少
  • flink生成水位线记录方式--基于特殊记录的水位线生成器
  • elementui引入弹出框报错:this.$alert is not defined 解决方案
  • 【新版】系统架构设计师 - 未来信息综合技术
  • 俄罗斯与乌克兰互换246名在押人员
  • 融创中国披露二次境外债重组方案:总规模约95.5亿美元债全额转股权,孙宏斌部分受限股票6年内不得处置
  • 网约车司机要乘客提前200米下车遭殴打,警方介入
  • 体坛联播|阿森纳、国米晋级欧冠半决赛,王楚钦晋级16强
  • 昆明一垃圾车致人身亡事故调查报告:驻车制动装置失效,司机欲阻停被撞
  • 佛山一房产七折起拍,原房主为大毒枭半年前被执行死刑