C에서 BigInt 클래스 구현
C에서는 long int보다 큰 숫자를 처리할 때 사용자 정의 " 큰 int" 클래스. 외부 구현에 의존하는 대신 자체 구현을 만들어 이러한 개념을 더 깊이 이해하는 것이 좋습니다.
데이터 구조
간단한 접근 방식은 숫자를 문자열로 저장하는 것입니다. , 더 작은 숫자(예: 숫자)로 나누어 배열에 배치합니다. 이는 비교 연산을 단순화하지만 덧셈, 곱셈과 같은 연산에 대한 우려를 불러일으킵니다.
알고리즘 개요
이러한 연산의 경우 정수의 이진 특성을 고려하는 것이 좋습니다. 예를 들어 더하기 연산자(=)를 구현하면 각 숫자 쌍을 반복하여 추가합니다. 결과가 BaseType을 오버플로하는 경우 초과분을 다음 숫자로 넘깁니다.
코드 예
template< class BaseType > BigInt< BaseType >& BigInt< BaseType >::operator += (BigInt< BaseType > const& operand) { BT count, carry = 0; for (count = 0; count < std::max(value_.size(), operand.value_.size(); count++) { BT op0 = count < value_.size() ? value_.at(count) : 0, op1 = count < operand.value_.size() ? operand.value_.at(count) : 0; BT digits_result = op0 + op1 + carry; if (digits_result-carry < std::max(op0, op1) { BT carry_old = carry; carry = digits_result; digits_result = (op0 + op1 + carry) >> sizeof(BT)*8; // NOTE [1] } else carry = 0; } return *this; }
구현 참고 사항
기타 연산자
뺄셈, 곱셈, 나눗셈에 대해 이 알고리즘 접근 방식을 반복합니다. <<와 같은 표준 연산자를 구현합니다. 출력 및 < 비교를 위해.
결론
사용자 정의 BigInt 클래스를 구축하는 것은 어렵지만 보람 있는 작업입니다. 여기에 설명된 단계를 따르면 C에서 임의의 큰 정수를 처리하는 기능적이고 효율적인 클래스를 구현하는 데 도움이 될 수 있습니다.
위 내용은 임의의 큰 정수를 처리하기 위해 C에서 BigInt 클래스를 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!