최근에 BigInteger 클래스를 만들려고했습니다. 지금, 나는 프로토 타입을하고 있었고 거의 작동했습니다. 이 프로토 타입은 함수가 아니며 클래스도 아니며, 그것이 작동하는지 보았습니다. BigInteger 구현에서 불일치가 발생했습니다.
이 지금까지 내 프로토 타입입니다 :std::vector<long long unsigned> vec1 {4294967295, 2294967295, 1294967295};
std::vector<long long unsigned> vec2 {4294967295, 2294967295, 1294967295};
int carry {};
for (int i {static_cast<int>(vec1.size()) - 1}; i != -1; --i) {
int unsigned greater = static_cast<unsigned int>(std::max(vec1[i], vec2[i]));
int unsigned result {};
if (i < static_cast<int>(vec2.size())) {
result = static_cast<int unsigned>(vec2[i] + vec1[i] + carry);
} else if (carry) {
result = static_cast<int unsigned>(vec1[i] + carry);
} else {
break;
}
if (result <= greater) {
vec1[i] += result;
carry = 1;
} else {
vec1[i] = result;
carry = 0;
}
}
if (carry) {
vec1.back() += 1;
}
for (auto const n : vec1) {
cout << n;
}
를 (그냥 컴파일러를 기쁘게하는 모든 캐스트와 조금 추한 모습) 그리고 이러한 결과입니다, 무엇을 그래서
858993459025899345892589934591
^ ^
858993459045899345902589934590 -> the correct one!
내가 잘못하고있어?
gcc 및 visual studio에서 동일한 결과를 얻습니다.
호기심, 왜 "int unsigned greater"를 사용하는 반면 vec1과 vec2는 "long long unsigned"입니까? –
이 코드를 호출하거나 결과를 표시하는 방법이 명확하지 않기 때문에 [MCVE] (https://stackoverflow.com/help/MCVE)가 아닙니다. 정확하고 잘못된 결과를 재현 할 수있는 충분한 코드를 제공해주십시오. 완전히 쓸모가있는 것은 아니지만 문제가없는 경우를 대비하여 내가 본 것을 언급하는 동안 이것을 언급 할 것이라고 생각했습니다. – ShadowRanger
그 xD에 대해서 생각조차하지 않았다. 그것은 물건의 작동 방식을 보았던 프로토 타입 일 뿐이었다. 갑작스럽게 끝난다면 –