不做任何乘法,不做任何除法的,效率不见得高. unsigned int Right[]={1000, 100, 10}; unsigned char BCDID[4]; void Int_2_BCD(unsigned int x) { unsigned char i;
if(x > 9999) return; //按LZ要求, 超过9999的数就不管了,呵呵
for(i=0; i<3; i++) //i=0,1,2:分别处理千,百,十位 { BCDID = 0; //各位的BCD初始值清0 while(x >= Right)//当x的值足够减去一千(百,十)时,你就 { x -= Right; //一千(百,十)一千(百,十)地减 BCDID++; //减去一千(百,十), 千(百,十)位值增1就是了 } } BCDID[3] = x; //个位简单了,最后剩下就是它 } //显然,在极端状态下(当x=9999时),需要做27次整数量减法运算和27次字节量增1运算.
|