C/C++面试题系列之3:输出1-N个数字

 

题目:用C/C++计算1+2+3+……N
条件:
1.不使用任何循环语句。(for,while,goto等等)
2.不使用任何条件语句。(if,?:等等)
3.不使用*/等运算,只使用+-运算 

4:更不能写1000个printf或是cout。 

 

一看到这个题,人们会想到递归,但是递归需要结束条件,题目要去不要任何判断条件,所以不行。

例一:变相的用1000个printf

#include #define out(i) printf("%d/n",i++) ; #define REP(N) N N N N N N N N N N #define Out1000(i) REP( REP( out(i) )) ; int main(int argc,char *argv[]) { int i=1; Out100(i); return 0; } 

 

这个方法的宏定义用的很巧妙,实际上是用了1000个printf,但是在题目中没出现。这个有打擦边球的嫌疑,算是一种方法。

 

例二:用类构造函数和静态变量

#include using namespace std; class NSum { public: NSum() { static unsigned sum =1; cout<

 

这个巧妙的用到了,类的构造函数和静态变量概念。每次NSum被调用,构造函数就把sum加1,并且静态变量会保存这个修改。利用数组类,免去了重复输入1-N很巧妙。可以达到目的。

 

例三:用模板类

#include using namespace std; template struct NumberGeneration { static void out(std::ostream &os) { NumberGeneration::out(os); os< struct NumberGeneration<1> { static void out(std::ostream &os) { os<<1<::out(std::cout); return 0; } 

 

 

 

 

 

你可能感兴趣的:(Linux,C/C++)