首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

数目字拆解算法

2012-09-16 
数字拆解算法随机给定一个数,要把它拆成有多少个4、8、12、16,拆解顺序是从大到小,例如随机给出17,应该拆出

数字拆解算法

随机给定一个数,要把它拆成有多少个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;

热点排行