gpt4 book ai didi

c++ - 使用char vector 的10的补数函数

转载 作者:太空宇宙 更新时间:2023-11-04 12:37:57 26 4
gpt4 key购买 nike

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

你好!因此,如果您不知道找到十进制数字的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循环,我收到错误< cc>,而当最后一个数字为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());


这是我的数字构造函数,首先将每个数字存储到我的 Thread 1: EXC_BAD_ACCESS (code=1, address=0x103400000)中,然后检查它是负数还是正数并进行十进制补码。

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

最佳答案

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--!否则,它将在第一次迭代中超出范围-它已经从向量的末尾开始(超出范围)。

关于c++ - 使用char vector 的10的补数函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55544194/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com