如果您已经知道十个补码,则可以跳过整个段落以解释其含义。
你好!因此,如果您不知道找到十进制数字的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
中,并检查它是负数还是正数并进行十进制补码。
我只需要一些有关如何修复我的函数的建议,看看我的构造函数看起来是否正确。非常感谢!
答案 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--
!否则,它将在第一次迭代中超出范围-它已经从向量的末尾开始(超出范围)。