读书人

大数截位除法有关问题

发布时间: 2012-02-04 15:43:09 作者: rapoo

大数截位除法问题
现有一数组,
保存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

读书人网 >C语言

热点推荐