我尽力用C ++编写代码。当我使用unsigned int和int来减去时,那没关系。但是,使用unsigned short int和short int来减去,我有一个问题。那么我需要在我的代码中做些什么呢?
非常感谢。
测试值:
21758612232416725117133766166700 1758612232416725117155428849047
一开始,我必须定义
* this> OP2
绝对
template< typename T >
HugeInteger< T > HugeInteger< T >::operator-(const HugeInteger &op2)const // subtraction operator; HugeInteger - HugeInteger
{
int size = integer.getSize();
int op2Size = op2.integer.getSize();
int differenceSize = size;
HugeInteger < T > difference(differenceSize);
difference = *this;
Vector<T>::iterator it = difference.integer.begin();
int counter = 0;
for (Vector<T>::iterator i = difference.integer.begin(), j = op2.integer.begin(); j < op2.integer.end(); i++, j++) {
if ((*i - *j - counter) < 10) {
*i -= (*j + counter);
counter = 0;
}
else {
*i += 10;
*i -= (*j + counter);
counter = 1;
}
}
while (counter == 1) {
if ((*(it + op2Size) - counter) < 10) {
*(it + op2Size) -= counter;
counter = 0;
op2Size++;
}
else {
*(it + op2Size) += 10;
*(it + op2Size) -= counter;
counter = 1;
op2Size++;
}
}
if (*this == op2) {
HugeInteger<T> zero(1);
return zero;
}
for (Vector<T>::iterator i = difference.integer.end() - 1; i > difference.integer.begin(); i--) {
if (*i == 0) {
differenceSize--;
}
else {
break;
}
}
difference.integer.resize(differenceSize);
return difference;
}
答案 0 :(得分:1)
您发布的代码中没有足够的信息来确定出现了什么问题。我怀疑它与“短”类型如何转换为error_reporting(E_ERROR | E_WARNING | E_PARSE);
有关。
下面,我展示了与HugeInt
非常相似的类定义。它跟踪一个值的符号,但不幸的是,它只定义了几个成员,足以证明减法。
这个类有一个坚果模板转换构造函数。如果其他构造函数都不能处理某个类型,它将尝试使用该类型转换值,就好像它们是某种整数值一样,与大小无关。
HugeInt
有两个示例减法操作,都涉及短值和“巨大”值。
main()