编程算法 - 求1+2+...+n(函数指针) 代码(C++)

求1+2+...+n(函数指针) 代码(C++)

本文地址: http://blog.csdn.net/caroline_wendy

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

可以使用函数指针求解, 通过递归调用, 每次递归值减1, 使用求反运算(!), 即非0为0, 0为1.

代码:

/*
 * main.cpp
 *
 *  Created on: 2014.7.12
 *      Author: spike
 */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>

typedef size_t (*fun)(size_t);

size_t Sum_T(size_t n) {
	return 0;
}

size_t Sum(size_t n) {
	static fun f[2] = {Sum_T, Sum};
	return f[!!n](n-1) + n;
}

int main(void)
{
	size_t result = Sum(10);
    printf("result = %d\n", result);
    return 0;
}

输出:

result = 55

编程算法 - 求1+2+...+n(函数指针) 代码(C++)

时间: 2024-10-06 10:08:36

编程算法 - 求1+2+...+n(函数指针) 代码(C++)的相关文章

编程算法 - 求1+2+...+n(函数继承) 代码(C++)

求1+2+...+n(函数继承) 代码(C++) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 求1+2+...+n, 要求不能使用乘除法\for\while\if\else\switch\case等关键字及条件判断语句(A?B:C). 可以使用函数继承, 通过递归调用, 每次递归值减1, 使用求反运算(!), 即非0为0, 0为1. 代码: /* * main.cpp * * Created on: 2014.7.12 * Author: spik

编程算法 - 求1+2+...+n(模板类) 代码(C++)

求1+2+...+n(模板类) 代码(C++) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 求1+2+...+n, 要求不能使用乘除法\for\while\if\else\switch\case等关键字及条件判断语句(A?B:C). 可以使用模板类求解, 输入模板参数, 进行递归调用, 每次递归值减1, 至模板参数为1时, 显示调用结束模板类. 代码: /* * main.cpp * * Created on: 2014.7.12 * Author

使用哈希算法将数字解析为函数指针-一种架构方法

使用哈希算法将数字解析为函数指针: 这也算是最简单的,不会带有地址冲突的哈希了,哈希函数可以描述为: func = arr[index].func index为输入,根据输入的index,找到其对应的函数指针返回 这种架构虽然简单,但是在做测试时还是非常有用的 比如一种测试有几十项,我可以使用这种架构来实现自动轮巡测试,或者手动交互时输入一个Index,即可以去调用对应的测试函数 另外根据这个代码,还可以学习到函数指针的定义和使用: 定义:typedef int (*FuncPtr)(char

编程算法 - 求1+2+...+n(构造函数) 代码(C++)

求1+2+...+n(构造函数) 代码(C++) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 求1+2+...+n, 要求不能使用乘除法\for\while\if\else\switch\case等关键字及条件判断语句(A?B:C). 可以使用构造函数, 循环求解, 使用数组构造多个类, 使用类的静态变量存储数据. 代码: /* * main.cpp * * Created on: 2014.7.12 * Author: spike */ #inc

编程算法 - 连续子数组的最大和 代码(C)

连续子数组的最大和 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 输入一个整型数组, 数组里有正数也有负数. 数组中一个或连续的多个整数组成一个子数组.求所有子数组的和的最大值. 使用一个数保存当前和, 如果当前和为小于0,  则替换新值, 否则, 递加, 使用一个数保存临时最大值. 代码: /* * main.cpp * * Created on: 2014年6月29日 * Author: wang */ #include <stdio

编程算法 - 不能被继承的类(私有构造函数) 代码(C++)

不能被继承的类(私有构造函数) 代码(C++) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 用C++设计一个不能被继承的类. 可以使用私有构造函数, 并提供静态成员函数, 返回和删除类的实例. 则只能在堆上创建实例, 不能在栈上创建. 代码: /* * main.cpp * * Created on: 2014.7.13 * Author: Spike */ #include <iostream> #include <list> us

编程算法 - 把数组排成最小的数 代码(C)

把数组排成最小的数 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 输入一个正整数数组, 把数组里所有数字拼接起来排成一个数, 打印能拼接出的所有数字中最小的一个. 大数转换为字符串, 重载快速排序的比较方法, 进行排序, 最后拼接. 代码: /* * main.cpp * * Created on: 2014.6.12 * Author: Spike */ /*eclipse cdt, gcc 4.8.1*/ #include <stdi

编程算法 - 最小的k个数 红黑树 代码(C++)

最小的k个数 红黑树 代码(C++) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 输入n个整数, 找出其中的最小k个数. 使用红黑树(multiset), 每次替换最大的值, 依次迭代. 时间复杂度: O(nlogk). 代码: /* * main.cpp * * Created on: 2014年6月29日 * Author: wang */ #include <iostream> #include <vector> #includ

编程算法 - 最好牛线(Best Cow Line) 代码(C)

最好牛线(Best Cow Line) 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 给定长度为N的字符串S, 要构造一个长度为N的字符串T. 反复进行如下任意操作. 从S的头部删除一个字符, 放入T的尾部; 从S的尾部删除一个字符, 放入T的尾部; 目标是要构造字典序尽可能小的字符串T. 使用贪心算法, 不断选取S首尾最小的字符, 放入T, 如果相等, 则再次向内查找, 找到内部最小的. 代码: /* * main.cpp * * Cr