两个整数的乘积有奇怪的错误
Multiplication of two deques of integers weird errors
这应该是我的整数类的最后一部分,看起来很容易,但有些地方出了问题。这个代码适用于用2个数字相乘吗?
// 0x12345 = {0x01, 0x23, 0x45}
integer operator*(integer rhs){
// long multiplication
unsigned int zeros = 0;
std::deque <uint8_t> row;
std::deque <std::deque <uint8_t> > temp;
integer out = 0;
for(std::deque <uint8_t>::reverse_iterator i = value.rbegin(); i != value.rend(); i++){
row = std::deque <uint8_t>(zeros++, 0); // zeros on the right hand side
uint8_t carry = 0;
for(std::deque <uint8_t>::reverse_iterator j = rhs.value.rbegin(); j != rhs.value.rend(); j++){
uint16_t prod = (uint16_t(*i) * uint16_t(*j)) + carry;// multiply through
row.push_front((uint8_t) prod);
carry = prod >> 8;
}
if (carry != 0)
row.push_front(carry);
out += integer(row);
}
return out;
}
它给了我CCD_ 1。假设operator+
是正确的(我似乎是正确的),是否有其他解释来解释为什么这是错误的
编辑:我根据wxffles更新了代码,但我认为我做错了,因为我仍然得到2424...
,对于0x25 * 0x25
,我得到89 (decimal)
edit2:发布正确的代码
我想您错过了最后一个进位。你不需要:
row.push_front(carry);
就在您将行添加到out之前?
相关文章:
- 如何确保在使用基于布尔值的两个方法之一调用方法时避免分支预测错误
- 两个线程一个使用流 Api,另一个线程创建文件失败并出现错误ERROR_SHARING_VIOLATION
- C++哈希表中,两个相同的实现,但一个给出错误
- 使用 SET(C++) 检查两个给定字符串是否是字谜时出现运行时错误
- C++ 分段错误:11 错误,同时编码将两个数字相加的链接列表
- 在 C++ 中创建两个不同的二叉树时出现分段错误
- 交换两个字符串时访问正确的内存时,我遇到了分段错误
- 试图添加两个矢量,但添加顺序错误
- pair的两个构造函数几乎相同,为什么不生成构建错误?
- 从两个 lambda 的函数返回 lambda 时的链接器错误
- 为什么我在尝试添加两个链表时出现此错误?
- 错误 :"+" 无法添加两个指针
- 表达式未评估为常数两个级别的constexpr函数(编译器错误?)
- 错误:当定义两个带有标头文件的类时,将重新定义类
- 在 c++ 程序中调试链表以添加两个数字: 有人可以解释为什么 l3=l3->next;导致错误?
- 输出错误:两个不同编译器上的不同输出:Prime Cryptarithm USACO
- 在两个类似类之间使用reinterpret_cast时错误
- 如何在两个设备之间与TCP通信时修复错误"连接被拒绝"
- 操作员=在两个std :: chrono :: time_point引起错误之间
- 在发布版本中划分两个双精度的结果错误