题目:求 1+2+…+n ,
要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A?B:C)。
分析:
这题本来有很多思路,直接使用公式1+2+...+n = n*(n+1)/2 这样直接可以得出结果。
或者使用循环遍历方法,1+2+...也很好实现,
但是不能使用乘除法,或者for,while语句。这就比较难了。
可以换这思路,使用递归思想,f(n) = f(n-1) + n 并且f(1) = 1, f(2) = f(1) + 2, 但这里面也有个问题,递归时,什么时候结束递归呢,就需要使用if语句,题目中要求不能使用if,那咋办呢?
有没有一个语句,不适用题目要求中提到的关键字来实现呢?
有个运算符,有这个功能:&& , A&&B 如果A为0或者false的话,B就不执行。
例子:
1+2+...+10 = 55
那我们可以实现下:
#include<iostream> using namespace std; int add(int n, int& sum) { (n-1)&&add(n-1, sum); sum += n; return sum; } int main() { int sum = 0; cout << "1+2+...+10 = " << add(10, sum) << endl; return 0; }
运行结果为:1+2+...+n = 55
10. 微软面试题:题目:求1+2+…+n,
最新推荐文章于 2024-03-31 15:50:01 发布