首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

大数截位除法有关问题

2012-02-04 
大数截位除法问题现有一数组,保存8字符,intiunsignedlongdHigh0,dLow0,l0//unsignedunsignedcharbyte

大数截位除法问题
现有一数组,
保存8字符,

    int   i;
    unsigned   long   dHigh   =   0,dLow=0,   l=0;   //unsigned  
    unsigned   char   byte[8]={0x41,0x0A,0xFD,0x9D,0x1D,0x8A,0xBC,0x1D};//其实这个就是一个大数,只不过没有合适的类型可以保存它,所以分开高低保存,
    dHigh   =   byte[0];    
    for(i=1;i <4;i++)     //0x41,0x0A,0xFD,0x9D
    {
            dHigh     =   (dHigh   < <   8);
            dHigh   |=   byte[i];
    }
   
    dLow   =   byte[4];       //0x1D,0x8A,0xBC,0x1D
    for(i=5;i <8;i++)
    {
            dLow     =   (dLow   < <   8);
            dLow   |=   byte[i];
    }    
   
请教大家,
如何把这个大数除以3600,
并把结果返回分别放在高低位里,


[解决办法]
如果只是8个字节的数
用 long long类型运算就够了

如果可能很大,那么

实现一个大数除法

数据结构就用数组

算法,手工除法的算法
[解决办法]
unsigned long rHigh, rLow, rem;
rHigh = dHigh / 3600;
rem = dHigh % 3600;
rLow = 0xffffffff / 3600 * rem;
rLow += (0xffffffff % 3600 + 1)* rem / 3600;
rLow += dLow /3600

热点排行