首页 > 其他 > 详细

10. 微软面试题:题目:求1+2+…+n,

时间:2014-03-09 17:17:03      阅读:535      评论:0      收藏:0      [点我收藏+]
题目:求1+2+…+n

要求不能使用乘除法、forwhileifelseswitchcase等关键字以及条件判断语句(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,,布布扣,bubuko.com

10. 微软面试题:题目:求1+2+…+n,

原文:http://blog.csdn.net/hhh3h/article/details/20832135

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!