无循环或条件打印1到1000

任务 :从1到1000打印数字,不使用任何循环或条件语句。 不要只写printf()cout语句1000次。

你会如何使用C或C ++?


编译时间递归! :P

#include <iostream>
template<int N>
struct NumberGeneration{
  static void out(std::ostream& os)
  {
    NumberGeneration<N-1>::out(os);
    os << N << std::endl;
  }
};
template<>
struct NumberGeneration<1>{
  static void out(std::ostream& os)
  {
    os << 1 << std::endl;
  }
};
int main(){
   NumberGeneration<1000>::out(std::cout);
}

这实际上编译为没有任何条件的程序集:

#include <stdio.h>
#include <stdlib.h>

void main(int j) {
  printf("%dn", j);
  (&main + (&exit - &main)*(j/1000))(j+1);
}


编辑:添加'&',所以它会考虑地址,从而避免指针错误。

标准C中的上述版本,因为它不依赖函数指针上的算术运算:

#include <stdio.h>
#include <stdlib.h>

void f(int j)
{
    static void (*const ft[2])(int) = { f, exit };

    printf("%dn", j);
    ft[j/1000](j + 1);
}

int main(int argc, char *argv[])
{
    f(1);
}

#include <stdio.h>
int i = 0;
p()    { printf("%dn", ++i); }
a()    { p();p();p();p();p(); }
b()    { a();a();a();a();a(); }
c()    { b();b();b();b();b(); }
main() { c();c();c();c();c();c();c();c(); return 0; }

我很惊讶似乎没有人发布这个 - 我认为这是最明显的方式。 1000 = 5*5*5*8.

链接地址: http://www.djcxy.com/p/37195.html

上一篇: Printing 1 to 1000 without loop or conditionals

下一篇: Designing function f(f(n)) ==