剑指offer——74求1+2+3+n
2024-10-07 19:22:23
题目描述
求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
题解:
利用类的构造和析构
利用类的构造和析构
//利用类的构造
class Temp{
public:
Temp() { ++N; sum += N; }
static void Reset() { N = ; sum = ; }
static unsigned int getRes() { return sum; }
private:
static unsigned int N, sum;//一定得是静态,否则每次创建是会重新赋值
};
unsigned int Temp::N = ; //一定得先初始化
unsigned int Temp::sum = ; class Solution {
public:
int Sum_Solution(int n) {
Temp::Reset();
Temp *t = new Temp[n];
delete[]t;
t = nullptr;
return Temp::getRes();
}
};
//利用类的析构
class A;
A *Array[];
class A{
public:
virtual unsigned int sum(unsigned int n){
return ;
}
};
class B :public A {
public:
virtual unsigned int sum(unsigned int n) {
return Array[!!n]->sum(n - ) + n;
}
};
int getSum(int n) {
A a;
B b;
Array[] = &a;
Array[] = &b;
return Array[]->sum(n);
}
//利用函数指针
typedef unsigned int(*fun)(unsigned int);
unsigned int Solution3_Teminator(unsigned int n){
return ;
} unsigned int Sum_Solution3(unsigned int n){
static fun f[] = { Solution3_Teminator, Sum_Solution3 };
return n + f[!!n](n - );
} // 利用模板
template <unsigned int n> struct Sum_Solution4{
enum Value { N = Sum_Solution4<n - >::N + n };
}; template <> struct Sum_Solution4<>{
enum Value { N = };
}; template <> struct Sum_Solution4<>{
enum Value { N = };
};
最新文章
- BigDecimal
- 使用es6的set和map实现数组去重复
- js常用函数陆续总结
- jsp实现过滤器的简单例子
- 解决<;a>;文本本身带下划线和超链接下划线重合的问题
- .net DataTable 正确排序姿势
- [Swust OJ 715]--字典序问题(组合数预处理/数位dp)
- 框架基础:ajax设计方案(五)--- 集成promise规范,更优雅的书写代码
- Redis “瘦身”指南
- HTML知识速递
- Upgrading an ASP.NET MVC 2 Project to ASP.NET MVC 3 Tools Update
- Winform调用百度地图接口简单示例
- STM32手记
- 我来谈谈PHP和JAVA在web开发上的的区别
- windows 10 下sublime text 3配置c/c++编译环境
- Linux基本权限管理
- 微软ASP.NET网站部署指南(2):部署SQL Server Compact数据库
- input输入框type=file时accept中可以限制的文件类型(转载)
- Linux下一个最简单的不依赖第三库的的C程序(2)
- 使用微软提供的Office Online实现Office文档的在线查看,编辑等功能