以文本方式查看主题

-  计算机科学论坛  (http://bbs.xml.org.cn/index.asp)
--  『 C/C++编程思想 』  (http://bbs.xml.org.cn/list.asp?boardid=61)
----  求救:c中多字节除法的实现  (http://bbs.xml.org.cn/dispbbs.asp?boardid=61&rootid=&id=29640)


--  作者:qiner
--  发布时间:3/31/2006 10:22:00 AM

--  求救:c中多字节除法的实现
unsigned char div(unsigned char a[],int n1,unsigned char b[],int n2,unsigned char d[])  // d=a mod b
{int i,j,k=0;
unsigned char *b1;
unsigned char *temp;
b1=(unsigned char *)malloc(n1);
temp=(unsigned char *)malloc(n1);
//把数组长度为n2的除数扩展到与被除数相同大小的数组
for(i=0;i<n2;i++)
      b1[n1-1-i]=b[n2-1-i];
for (i=0;i<n1-n2;i++)
      b1[i]=0;
                                                                                                    
k=cmp(a,b1,n1);/*判断除数与被除数大小,若被除数大则返回1*/
while( k==1)
  {sub(a,b1,n1,temp);
    for(i=0;i<n1;i++)
    { a[i]=temp[i];
     temp[i]=0;}
     k=cmp(a,b1,n1);}
if(k==0){for(i=0;i<n1;i++) d[i]=0;}
if(k==-1){for(i=0;i<n1;i++) d[i]=a[i];}
}
调试中,有时候会陷入循环,一直跳不出来.是否这个算法效率太低,有没有更优的算法.
各位大侠请多多指点一下.救命啊.
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
3,625.000ms