剑指offer47:位运算+递归。求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
2024-10-19 13:18:46
1 题目描述
求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
2 思路和方法
(1)递归,不能使用if等条件判断语句,可以使用&&逻辑运算符的短路特性实现。当n=0时,不进行后一个判断的计算,作为递归终止。
(2)利用sizeof(a)计算bool数组的字节数,bool类型在C++中占一个字节。bool a = [n][n+1]; 因一共有n*(n+1)个1,下三角或者上三角,第一行:[1]和为1;第二行:[1][1] 和为2;第三行:[1][1][1]和为3,……。bool类型的数据a,sizeof(a)=n*(n+1),所以1+2+3+...+n=sizeof(a)=n*(n+1)/2,或者是sizeof(a)>>1。
3 C++核心代码
#include<iostream> #include<vector> using namespace std; class Solution {
public:
int Sum_Solution(int n) {
int sum = n;
sum && (sum += Sum_Solution(n - ));// 利用前一个判断短路;当n=0时,不进行后一个判断的计算,作为递归终止
return sum;
}
}; int main()
{
Solution a; int res = a.Sum_Solution();
cout << "result = " << res << endl;
system("pause");
return ;
}
class Solution {
public:
int Sum_Solution(int n) {
bool a[n][n+];
return sizeof(a)>>;
}
};
参考资料
https://blog.csdn.net/feng_zhiyu/article/details/82112248
最新文章
- 游戏编程系列[1]--游戏编程中RPC协议的使用[2]--Aop PostSharp篇
- RabbitMQ(四)
- redis持久化以及主从服务器的配置
- 迁移mysql数据到oracle上
- 【问题&;解决】解决 Android SDK下载和更新失败“Connection to https://dl-ssl.google.com refused”的问题
- Cisco IOS Debug Command Reference Command E through H
- sql复制表
- C++ STL之list容器的基本操作
- V9自定义分页函数
- Fedora 命令
- hdu 3929 Big Coefficients 容斥原理
- Eclipse配置Git
- SQL从入门到基础 - 05 数据分组、Having语句
- 恶意软件Mirai换了个马甲 瞄上我国2亿多台IoT设备
- [国嵌攻略][157][SPI总线介绍]
- 编写简单的辅助脚本来在 Google 表格上记账
- SQL Server Cast、Convert数据类型转换
- 深入理解 Vue Computed 计算属性
- Docker Kubernetes Volume 本地数据卷
- Log4j 日志记录
热门文章
- MySQL数据分析—(4)关系数据库的三个逻辑框架
- 学院管理系统(mysql版)
- GitHub排名TOP30的机器学习开源项目/贪心学院
- 最全的tcpdump使用详解
- php中_initialize()函数与 __construct()函数的区别说明
- Hadoop常用操作汇总
- VUE数组操作方法的局限
- [Java读书笔记] Effective Java(Third Edition) 第 7 章 Lambda和Stream
- python中的tcp示例详解
- 阶段5 3.微服务项目【学成在线】_day03 CMS页面管理开发_02-自定义查询页面-服务端-接口开发