高手请进!求64位的算法

sharkhuang 2003-09-23 10:59:57
现在需要用到64位数字的加减运算,由于计算最大只能表示32位的数字!所以定义:typedef count64{
u32 high;
u32 low;
}u64;

u64 A,B,c;

现在需要得到c =A+B,

请能给出完整的加减算法,(最好是有乘除)。

...全文
52 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
cxjddd 2003-09-23
  • 打赏
  • 举报
回复
64位的算法?以写过,感觉很不爽,因为除法太难写了。

其实你可以用 long long 或 __int64 的。
doer_ljy 2003-09-23
  • 打赏
  • 举报
回复
进位怎么办?
sharkhuang 2003-09-23
  • 打赏
  • 举报
回复
to:ZhangYv(17427437 高手加,尤欢迎MM加)

有c的代码吗?
ks9960 2003-09-23
  • 打赏
  • 举报
回复
用数组存放,一位一位处理。
ZhangYv 2003-09-23
  • 打赏
  • 举报
回复
这是处理2进制的高精度加,减和乘法的C++程序.
/* Prositive HighPricistion—Operation of baniry system */
#include <iostream.h>
#include <mem.h>
const int MAXSIZE = 20; //max length of the number 修改位数
const int K = 2; //baniry system 在这里可以修改K进制的高精度
class hp{
int len; //length of number
int s[MAXSIZE]; //store high precistion number
public:
hp();
hp hp::operator = (hp C);
};
hp::hp()
{
len = 0;
memset(s, 0, MAXSIZE*sizeof(int));
}
istream &operator >> (istream &in, hp &HP)
{
char s[MAXSIZE];
int i;
cout << "Input Number = ";
cin >> s;
HP.len = strlen(s);
for (i = 0; i < HP.len; i++)
HP.s[i] = s[HP.len-i-1] - '0'; //change string to high precisition
return in;
}
ostream &operator << (ostream &out, hp &HP)
{
int i;
for (i = HP.len-1; i >= 0; i--)
cout << HP.s[i];
return out;
}
hp operator +(hp A, hp B)
{
int i, len;
hp C;
if (A.len > B.len)
len = A.len;
else
len = B.len; //get the bigger length of A,B
for (i = 0; i < len; i++){
C.s[i] += A.s[i] + B.s[i];
if (C.s[i] >= K){
C.s[i] -= K;
++C.s[i+1]; //add 1 to a higher position
}
}
if (C.s[len] > 0)
C.len = len+1;
else
C.len = len;
return C;
}
hp operator - (hp A, hp B) //different of the two HighPrecision Numbers
{
int len, i;
hp C;
if (A.len > B.len)
len = A.len;
else
len = B.len;C.len = 4;
for (i = 0; i < len; i++){
C.s[i] += A.s[i] - B.s[i];
if (C.s[i] < 0){
C.s[i] += K;
--C.s[i+1]; //subtract 1 to higher position
}
}
while (C.s[len-1] == 0 && len > 1)
--len;
C.len = len;
return C;
}
hp operator * (const hp &A, const hp &B)
{
int len, i, j;
hp C;
for (i = 0; i < A.len; i++)
for (j = 0; j < B.len; j++){
len = i+j;
C.s[len] += A.s[i] * B.s[j];
C.s[len+1] += C.s[len] / K;
C.s[len] %= K;
}
len = A.len + B.len + 1;
/*
the product of a number with i digits and a number with j digits
can only have at most i+j+1 digits
*/
while (len > 1 && C.s[len-1] == 0)
--len;
C.len = len;
return C;
}
hp hp::operator = (hp C)
{
int i;
len = C.len;
for (i = 0; i < MAXSIZE; i++)
s[i] = C.s[i];
return *this;
}
int main()
{
hp A, B, C;
cin >> A >> B;
C = A+B;
cout << A << ‘+’ << B << “ = “ << C << endl;
C = A-B;
cout << A << ‘-’ << B << “ = “ << C << endl;
C = A*B;
cout << A << '*' << B << " = " << C << endl;
return 0;
}
sharkhuang 2003-09-23
  • 打赏
  • 举报
回复
无符号的也行!!help me!
sharkhuang 2003-09-23
  • 打赏
  • 举报
回复
up
sharkhuang 2003-09-23
  • 打赏
  • 举报
回复
我不要除发!只要加减~~~~~

sorry 我这里没有long long!
playboyxp 2003-09-23
  • 打赏
  • 举报
回复
help you up

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧