使用char向量的10的补数函数

时间:2019-04-05 22:40:24

标签: c++

如果您已经知道十个补码,则可以跳过整个段落以解释其含义。

你好!因此,如果您不知道找到十进制数字的10的补码,那么您假设做9的补码,然后将该数字加1。要进行9的补码,您假设每个数字都减去9,例如,您的十进制数是20。您将2和0都减去9,就组成了20,然后得到7和9。最后得到79。并且这是9的补数加1,所以20的10的补数是080。前面的零表示+号。可以说这个数字是负数-20,您需要乘以-1并执行相同的操作,但是这次我们要在前面加上9,这样数字便是980。

   vector<char> tensComplement(){

    for(std::vector<char>:: iterator i = storage.begin(); i != storage.end(); i++){
        storage[*i] = 9 - storage[*i];
    }
    storage.end() += 1;

    for(std::vector<char>:: iterator it = storage.end(); it != storage.begin(); it--){ // error for this entire loop
        if(storage[*it] == 10){
            storage[*it] = 0;
            storage[*it - 1] += 1;
        }
    }

    return storage;

}

很抱歉,如果这是一个不好的问题,我对C ++还是很陌生。我的问题是,无论输入什么数字,我都会收到错误的答案。 (仅当我注释掉第二个for loop时有效。)第一个for loop试图遍历整个vector<char> storage并将其减去9。此外,对于第二个for循环,我收到一个错误Thread 1: EXC_BAD_ACCESS (code=1, address=0x103400000),应该做的是,当最后一个数字最终为10时,它将继续执行。

BigInt(int x){
    char digit;
    while (x > 0){
        digit = x % 10;
        storage.push_back(digit);
        x /= 10;
    }
    if (x < 0){
        x *= -1;
        tensComplement();
        storage.push_back(9);

    }
    else{
        tensComplement();
        storage.push_back(0);
    }

    reverse(storage.begin(),storage.end());

这是我的数字构造函数,首先将每个数字存储到我的vector<char> storage中,并检查它是负数还是正数并进行十进制补码。

我只需要一些有关如何修复我的函数的建议,看看我的构造函数看起来是否正确。非常感谢!

1 个答案:

答案 0 :(得分:0)

for(std::vector<char>:: iterator it = storage.end(); it != storage.begin(); it++){ // error for this entire loop
    if(storage[*it] == 10){
        storage[*it] = 0;
        storage[*it - 1] += 1;
    }
}

storage.end()storage.begin()迭代的代码很混乱。如果要在向量中向后移动,则必须it--!否则,它将在第一次迭代中超出范围-它已经从向量的末尾开始(超出范围)。