超越前辈没有?九九乘法表新写法
本帖最后由 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);
}