不使用loop和condition打印出1-1000

转自:http://coolshell.cn/articles/3445.html

C/C++语言,不允许使用Loop和Condition (一行行输入也不可以), 写一个程序打印出1~1000.

方法有很多,我选了俩个人觉得比较有意思的。

一、Power of Objects 

#include <cstdio>

int cnt;

class Num { public: Num() { printf("%d/n", ++cnt); } };

int main() { Num num[1000]; return 0;}

通过定义1000个变量,来达到Loop 1000次的效果

 

二、真正符合要求的Solution (gcc v3.4.2)

#include <stdio.h>

#include <stdlib.h>

void main(int j) {

       printf("%d/n", j);

      (main + (exit-main)*(j/1000))(j+1);

}

几乎每一个想出来的方法,本质都是通过取巧的手段来实现Loop 1000次。到目前为止,我看过20多种看起来work的方法,但我认为,严格来说,只有上面的第二种真正满足要求(暴力的不算)。如果把程序编译成汇编,你就会发现唯有二并未用到条件跳转。

我最先是在coolshell上看到这具代码的,上面并没有解释。这里解释一下:int j 在这里被认为是argc。没有参数运行时,j=1。接下来,当j<1000时,j/1000为0,所以会产生一个调用;当j=1000时,函数指针变成了exit, 这时调用的是exit(1001)将返回。

 

二的汇编代码 (点击大图)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值