实现两个非负整数相乘
2014-12-06 20:52
197 查看
题目:《EPI》P181
实现两个非负整数相乘,只允许位操作,不允许自增或自减符号。
提示:左移一位相当于乘以2,右移一位相当于除以2.
实现两个非负整数相乘,只允许位操作,不允许自增或自减符号。
提示:左移一位相当于乘以2,右移一位相当于除以2.
unsigned int Add(unsigned int x, unsigned int y) { if (y == 0) return x; unsigned int sum = x^y; unsigned int carry = (x&y) << 1; return Add(sum, carry); } unsigned int multiply(const unsigned int &a, const unsigned int &b) { if (a == 0 || b == 0) return 0; unsigned int sum = 0, k = 1,atemp=a; while (k) { if (b&k) { sum = Add(atemp, sum); } atemp <<= 1;//左移一位相当于乘以2 k <<= 1; } return sum; }
相关文章推荐
- C语言实现两个大数相乘问题
- 实现两个大数相乘
- 实现两个long long 相乘取模的汇编代码
- struts2标签实现两个值相乘
- C语言实现两个大数相乘
- 关于两个长整数相乘的实现
- 使用链表实现两个多项式相加和相乘
- Java实现两个大数相乘
- C++实现两个矩阵相乘
- 编程实现两个矩阵相乘
- 两个大数相乘的C++实现
- c++实现两个矩阵相乘
- 两个大数相乘(纯C实现)
- C++实现——两个大数相乘
- 实现两个矩阵的相乘(指针)
- 实现两个大整数相乘
- C#实现用欧几里德算法、连续整数检测算法、公因数算法求两个非负整数的最大公约数
- JS实现两个大数(整数)相乘 实例代码
- 华为OJ机试题目:两个大整数相乘(纯C语言实现两个大整数相乘,两种方法实现大数相乘)
- 两个多项式相乘和相加的java实现