知乎的一个问题:
答主:小白白。
数学家版本:
(简单利索,深藏功与名)
#include <iostream>
#include <cmath>
int main()
{
std::cout << std::tgamma(20 + 1) << std::endl;
}
语言学家版本:
(语言学家,你懂得,恨不得把所有语法特性都派上用场)
#include <iostream>
#include <utility>
template<std::size_t...I> constexpr auto foo(std::index_sequence<I...>) { return ((I+1) * ...); }
int main()
{
std::cout << foo(std::make_index_sequence<20>()) << std::endl;
}
历史学家版本:
(void main() 有没有嗅到浓厚的历史气息?)
#include <stdio.h>
void main(void) {
int i;
long long j;
for(i = 1, j = 1;i <= 20; j *= i++);
printf("%lld", j);
}
敏捷开发上线1.0版本:
(可以说是非常敏捷了)
#include <stdio.h>
int main() {
//printf("%d", 1*2*3*4*5*6*7*8*9*10);
printf("%lld", (long long)1*2*3*4*5*6*7*8*9*10*11*12*13*14*15*16*17*18*19*20);
}
面向对象专家版本:
(好家伙,一个简单的问题,愣是祭出了接口、继承、虚函数、虚继承、智能指针等一大堆东西出来,这很面向对象)
#include <iostream>
#include <string>
#include <memory>
struct IBaseInterface {
virtual ~IBaseInterface() = 0;
};
inline IBaseInterface::~IBaseInterface() = default;
struct IDataProvider : virtual public IBaseInterface {
virtual int first() = 0;
virtual int last() = 0;
virtual int next(int v) = 0;
};
struct ICalculator : virtual public IBaseInterface {
virtual long long calc(IDataProvider *) = 0;
};
struct IPrinter : virtual public IBaseInterface {
virtual void print(const std::string &) = 0;
};
struct ISerializer : virtual public IBaseInterface {
virtual std::string serialize(long long value) = 0;
};
struct IRunnable : virtual public IBaseInterface {
virtual void run() = 0;
};
class Foo : virtual public IRunnable {
std::shared_ptr<IDataProvider> m_dp;
std::shared_ptr<ICalculator> m_c;
std::shared_ptr<ISeria