如何使用unsigned short int和short int在C ++中减去hugeinteger?

时间:2016-03-27 03:16:30

标签: c++ c++11 visual-c++ c++14 subtraction

我尽力用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;
}

1 个答案:

答案 0 :(得分:1)

您发布的代码中没有足够的信息来确定出现了什么问题。我怀疑它与“短”类型如何转换为error_reporting(E_ERROR | E_WARNING | E_PARSE); 有关。

下面,我展示了与HugeInt非常相似的类定义。它跟踪一个值的符号,但不幸的是,它只定义了几个成员,足以证明减法。

这个类有一个坚果模板转换构造函数。如果其他构造函数都不能处理某个类型,它将尝试使用该类型转换值,就好像它们是某种整数值一样,与大小无关。

HugeInt有两个示例减法操作,都涉及短值和“巨大”值。

main()