读书人

数目字拆解算法

发布时间: 2012-09-16 17:33:16 作者: rapoo

数字拆解算法

随机给定一个数,要把它拆成有多少个4、8、12、16,

拆解顺序是从大到小,

例如

随机给出17,应该拆出 一个16及余数1,而不是四个4及1。

又如,25,拆成 一个16,一个8,余1

如此类推。


希望求一个精简一点的方法,程序越少越好。

最好是一条公式。



[解决办法]

Java code
    long src=12345L;    System.out.println("16*"+(src>>4));    System.out.println("12*"+(src&=0xF)/12);    System.out.println("08*"+(12>src&&src>7?1:0));    System.out.println("04*"+(8>src&&src>3?1:0));
[解决办法]
C/C++ code
void  split( int n ) {    const  char*  tbl[] = { "","1*1","1*2", "1*3", "4*1", "4*1+1*1", "4*1+1*2", "4*1+1*3",        "8*1", "8*1+1*1", "8*1+1*2", "8*1+1*3","12*1","12*1+1*1", "12*1+1*2","12*1+1*3" };    if( n >= 16 ) printf( "16*%d+", n>>4 );    printf( "%s\n", tbl[n&0xf] );}
[解决办法]
i_16=x&~0xf/16;
i_12=(x&0xf>=12)?1:0 ;
i_8= (x&0xf<12)&&(x&0xf>=8) ?1:0;
i_4= (x&0xf<8)&&(x&0xf>=4 ) ?1:0 ;
i_2=(x&0xf<4)&&(x&0xf>=2 )?1:0;

读书人网 >软件架构设计

热点推荐