c语言九九乘法表没有间距,跨越前辈没有?九九乘法表新写法

超越前辈没有?九九乘法表新写法

本帖最后由 u010211892 于 2014-04-21 21:07:28 编辑

灵感帖子地址:http://bbs.csdn.net/topics/390608383

首先是vrace前辈的位运算解法,看懂以后发现,真是个矫情的前辈

#include 

#include 

int main(void)

{

int a;

for (a = 0x11; a 

{

for (a = (a & 0xf0) + 1; (a & 0x0f) <= ((a & 0xf0) >> 4); a++)

{

printf("%dx%d=%d\t",

(a & 0x0f),

(a & 0xf0) >> 4,

((a & 0xf0) >> 4) * (a & 0x0f));

}

a += 0x10;

printf("\n");

}

return 0;

}

然后,是mujiok2003前辈的双重递归解法

#include 

void mtable_helper(int const n, int const i)

{

if(i > n)

{

printf("\n");

}

else

{

printf("%dx%d=%d ", i, n, i *n);

mtable_helper(n,i+1);

}

}

void mtable(int const n)

{

if(0 == n) return;

mtable(n-1);

mtable_helper(n,1);

}

int main()

{

mtable(9);

return 0;

}

最后,我综合写了一个,超越前辈了有没有?请多指教!

/************************************************

> Filename: 9x9.c

> Author  : Chen

> Date: 2014/04/21 Monday

************************************************/

#include 

#define  ECHO(A)    puts(A);

typedef  void       ___;

___ __(int const i )

{

printf("%dx%d=%-3d", i & 0x0f,( ( i & 0xf0 ) >> 4 ),

( i & 0x0f )

* ( ( i & 0xf0 ) >> 4 ) );

if( ( ( i + 1 ) & 0x0f ) <= ( ( i & 0xf0 ) >> 4 ) )

__(i+1);

else

ECHO("")

}

___ _(const int i)

{

if ( ( i & 0xf0 ) >> 4 )

{   _( i - 0x10 );

__( i );

}

}

int main(  int argc , char **argv )

{

_( 0X91 );

return 0;

}

------解决方案--------------------

楼主,前辈没那么容易超越的,这里有很多厉害的人的

顺便卖弄一下自己写的一个,不好的地方请多多指正

void Get9x9()

{

char msg[1024] = {0};

__asm

{

mov ax, 0

lea edx, msg

loopbegin1:

cmp ah, 9

jnb loopend

inc ah

mov al, 0

loopbegin2:

cmp al, ah

jnb loopend2

inc al

mov ch, '0'

add ch, al

mov [edx], ch

inc edx

mov [edx], 'x'

inc edx

mov ch, '0'

add ch, ah

mov [edx], ch

inc edx

mov [edx], '='

inc edx

push ax

mov bl, ah

mul bl

mov bh, 10

div bh

mov ch, al

add ch, '0'

mov [edx], ch

inc edx

mov ch, ah

add ch, '0'

mov[edx], ch

inc edx

pop ax

mov [edx], 32

inc edx

jmp loopbegin2

loopend2:

mov [edx], 10

inc edx

jmp loopbegin1

loopend:

mov [edx], 10

}

printf(msg);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值