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

这篇具有很好参考价值的文章主要介绍了【算法笔记】求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的效果。文章来源地址https://www.toymoban.com/news/detail-730112.html

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;

到了这里,关于【算法笔记】求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 算法--辗转相除法

    遇到一题算法题,如下: 求字符串的最大公因子? 对于字符串 s 和 t,只有在 s = t + … + t(t 自身连接 1 次或多次)时,我们才认定 “t 能除尽 s”。 给定两个字符串 str1 和 str2 。返回 最长字符串 x,要求满足 x 能除尽 str1 且 x 能除尽 str2 。 约数。整数a除以整数b(b≠0)除得

    2024年02月13日
    浏览(34)
  • FPGA应用学习笔记----定点除法的实现

       除以2可以这样移位    迭代除法,就是直接除 迭代除法,就是直接除  除数左移,被除数减去除数,余数大于0则商数置1然后左移,余数作为被减数左移,再减除数,再看余数是否大于0,若大于0,还是这样操作,若小于0,则商数为0,且余数直接等于上次的余数 synplif

    2024年02月13日
    浏览(22)
  • 【算法】辗转相除法求最大公约数

    辗转相除法 ,又称 欧几里德算法(Euclidean Algorithm) ,是求两个数的 最大公约数(greatest common divisor) 的一种方法。用较大的数除以较小的数,再以除数和余数反复做除法运算,当余数为0时,取当前算式除数为最大公约数。 求30和18的最大公约数: 30 /  18  = 1 余  12 18 

    2024年02月14日
    浏览(41)
  • 【c++】算法:高精度(经典加减乘除){含解析(图解)}

    Hi~ o(* ̄▽ ̄*)ブ,今天来一起看看c++算法之高精度 之后会持续更新有关c++算法系列,欢迎观看!(#^.^#) 目录 前言 使用高精度的目的: 基本方法介绍:   一、A+B problem 基本思路解析: 具体步骤: 代码如下: 二、A-B problem 基本思路解析: ​编辑 具体步骤:  代码如下:  三

    2024年01月23日
    浏览(43)
  • C/C++ 高精度(加减乘除)算法二进制优化

    第一章 简单实现 第二章 压位优化 第三章 二进制优化(本章) 上一章《C/C++ 高精度(加减乘除)算法压位优化》实现了优化的高精度计算,采用int32的整型数组每个元素可以储存9个10进制数字,想要再进一步优化计算速度,可以改变数据存储方式,采用二进制存储数字。依然采

    2024年02月11日
    浏览(27)
  • 【C++基础】auto关键字(C++11)(auto的使用细则;auto不能推导的场景;auto的使用场景;基于范围的for循环)

    在早期C/C++( C++98 )中auto的含义是:使用auto修饰的变量,是具有 自动存储器的局部变量 ,但遗憾的是一直没有人去使用它。因为在函数内定义的变量默认就是局部变量。 C++11 中,标准委员会赋予了auto全新的含义即:auto不再是一个存储类型指示符,而是作为一个新的 类型指示

    2023年04月13日
    浏览(34)
  • C语言辗转相除法运用 24/1/22笔记错题整理

    题目: 思路:一开始用最普通的方法去解题,计算量较大,但是 求最大公约数常用的有两种简单方法,一是九章算术中的 更相减损术 :大数减小数直到相等,相等的数即最大公约数,该算法 时间复杂度约为O(N) ;二是欧几里得的 辗转相除法 :大数除以小数取余数(相当于模

    2024年01月23日
    浏览(42)
  • 算法通关村十三关 | 辗转相除法、素数和丑数

            辗转相除法又称欧几里得算法,求两个数的最大公因数,希腊数学家喜欢用图形来处理问题,于是 将要求最大公约数问题转化为,以两个数字构成矩形,寻找可以铺满整个矩形的最大正方形的边长问题。 例如8和12的最大公因数是4,记作gcd(8,12)=4,辗转相除法的规则

    2024年02月09日
    浏览(36)
  • Windows配置IP时弹窗:出现了一个意外的情况,不能完成你在设置中所要求的更改

    问题描述: 解决办法:以管理员身份打开cmd, 手动配置IP方法:输入 netsh interface ip set address “以太网” static 192.168.0.8 255.255.255.0 192.168.1.1 然后敲回车,如果没有任何提示,说明设置静态ip地址成功。192.168.0.8是ip地址,255.255.255.0是子网掩码,192.168.0.1是网关,同样方法可以设

    2024年02月16日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包