[原创]另类调用 printf 完成任务的方法
2008-06-02 15:56
267 查看
昨天逛csdn/c版,看到如下一道题:
函数原形已经给出:int p(int i, int N);
功能:调用该函数,打印如下格式的输出,例p(1, 7);
1
2
3
4
5
6
7
6
5
4
3
2
1
即每行一个数字。(注意:N只打印一次)
要求:
1. 函数中唯一能够调用的函数就是printf。
2. 不准使用如下的关键字:typedef, enum, do, while, for, switch, case, break, continue, goto, if。
3. 不能使用逗号表达式和?:表达式。
4. 函数中只能有一条语句。
很快有人给出了答案,果不出所料,用的是递归。但貌似不符合题目要求1。难道...
断了递归这条路之后,貌似只有用偶得老本行啦:
int p(int i,int N)
{
__asm__ __volatile__("movl %%esp,%%ebx;0:cmp $0,%0;jz 1f;pushl %%esi;"
"pushl %%edi;call _printf;incl %%esi;decl %0;jmp 0b;"
"1:cmp $0,%1;jz 2f;pushl %2;pushl %%edi;call _printf;"
"decl %1;decl %2;jmp 1b;2:movl %%ebx,%%esp"
::"m"(N-i+1),"m"(N-i),"m"(N-1),"S"(i),"D"("%d/n"));
}
(编译环境 gcc v3.3.1)
over!
函数原形已经给出:int p(int i, int N);
功能:调用该函数,打印如下格式的输出,例p(1, 7);
1
2
3
4
5
6
7
6
5
4
3
2
1
即每行一个数字。(注意:N只打印一次)
要求:
1. 函数中唯一能够调用的函数就是printf。
2. 不准使用如下的关键字:typedef, enum, do, while, for, switch, case, break, continue, goto, if。
3. 不能使用逗号表达式和?:表达式。
4. 函数中只能有一条语句。
很快有人给出了答案,果不出所料,用的是递归。但貌似不符合题目要求1。难道...
断了递归这条路之后,貌似只有用偶得老本行啦:
int p(int i,int N)
{
__asm__ __volatile__("movl %%esp,%%ebx;0:cmp $0,%0;jz 1f;pushl %%esi;"
"pushl %%edi;call _printf;incl %%esi;decl %0;jmp 0b;"
"1:cmp $0,%1;jz 2f;pushl %2;pushl %%edi;call _printf;"
"decl %1;decl %2;jmp 1b;2:movl %%ebx,%%esp"
::"m"(N-i+1),"m"(N-i),"m"(N-1),"S"(i),"D"("%d/n"));
}
(编译环境 gcc v3.3.1)
over!
相关文章推荐
- [原创]另类调用 printf 完成任务的方法
- [原创]另类调用 printf 完成任务的方法
- ant中调用外部ant任务的两种方法
- jQuery Ajax 方法调用 Asp.Net WebService 的详细例子(原创)
- 在子更新时,同步更新相应frame.就是在更新本frame时,找到上级对象的相应的frame调用对应的location的reload()方法,完成同步更新。
- window 2008 定时任务调用bat不成功的解决方法
- 【原创】iframe与父页面之间,变量、方法互相调用
- 文档加载完成自动调用Js中的方法
- 适配远程接口调用的另类方法
- quartz 暂停后重新启动,在暂停时 被暂停后的任务,在启动后会补偿执行即 会连续多次调用job中的execute方法。
- 【原创】Js调用后台方法
- JavaScript控制图片加载完成后调用回调函数的方法
- jQuery Ajax 方法调用 Asp.Net WebService 的详细例子(原创)
- 有个需求 除去周六,周日的时间,工作时间以早上8点半到下午五点半,9小时,以现在时间为起始时间,给一个完成任务需要时间参数x小时 用个方法实现推动几月几号完成,这个方法好实现吗
- php中抽象类在其方法中例化其子类来完成对自己方法的调用
- C++第5周任务【任务2】本任务将设计一个简单的分数类,完成对分数的几个运算。一则巩固基于对象编程的方法,二则也为第10章做运算符重载等积累些感性认识。
- delphi 调用dll中的资源的另类方法
- C++成员函数指针的另类调用方法
- [MSYS]另类busybox调用/安装方法
- Python调用ctypes使用C函数printf的方法