变态问题之禁用C部分关键字

问题重现:

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

 

解法一:&&的妙用

#include <stdio.h>
int fun(int n){
	int sum=0;
    //只有n不为0时才给sum赋新值
    n && (sum=fun(n-1));
	return n+sum;
}

int main()
{
	printf("%d\n",fun(10));
	return 0;
}

解法二:函数指针的用场
typedef作用说明:
1、给变量一个易记且意义明确的新名字(别名):
如,typedef struct Node LNode,typedef int* pInt等

2、简化一些比较复杂的类型声明(自定义新类型):
如,有一个char *(*fun)(int,char *)的函数指针,现只需要typedef char *(*fun)(int,char *)即可,此后fun就代表此类型了

#include <stdio.h>
//定义一个函数指针类型fun
typedef int (*fun)(int);

/*结束函数*/
int fun1(int n){
	return 0;
}

/*中间函数*/
int fun2(int n){
	//函数指针数组
	fun f[2]={fun1,fun2};
    //printf("%d",!!n);
    // !!n,当n==0时,组合结果才为0,即二次取反
	return n+f[!!n](n-1);
}

int main()
{
	printf("%d\n",fun2(10));
    //system("pause");
	return 0;
}

 

点赞