2016-09-18 4 views
-1

나는 C에서 작업 중이며 제목에서 말한 것처럼 매우 큰 숫자를 나타내는 unsigned long longs의 이중 연결 목록에 대한 노드 인 struct이 있습니다.부호없는 long long의 연결된 목록으로 표시된 두 개의 매우 큰 숫자 나누기

기본 산술을 구현해야하고 +, -, *을 달성했지만 여전히 나눗셈이 필요합니다. 많은 수의 산술 연산에 대한 해답을 링크드리스트로 표현했지만 문제는 또 다른 부분 인 오버플로가 있습니다.

저는 현재 오랫동안 구분하고 있습니다. 제 첫 번째 숫자 (unsigned long long)가 균등하게 나눠지지 않을 때 남은 숫자가 두 자리 (두 unsigned long long s)로 옮겨집니다. 정밀도를 유지하면서 ull으로 두 개의 숫자로 표시된 큰 숫자를 나누는 방법을 모르겠습니다. 나누기 함수는 두 번째 숫자가 첫 번째 숫자를 균등하게 나눕니다.

내가 줄 필요가있는 정보가 무엇인지 모르겠지만 여기에 붙어있어 직감이 도움이 될 것입니다. 감사합니다.

편집 : StackOverflow에 대한 나의 명백한 새로운 점에 대해 사과드립니다. 그러나 그 호기심 때문에 내가 문제를 해결하는 방법은 숫자를 2 진수로 취급하고 비트별로 나누는 것입니다. 이 솔루션은 내가 가진 문제점을 해결합니다.

+0

정수부? 당신이 다른 것을 얻을 때까지 오랫동안 나누십시오. –

+6

1) C가 C++이 아닙니다. C가 아닙니다. 2) 수정 행 4704451311을 수정하면 수정 문제가 발생합니다. 그러한 행이 없으면 [ask]를 읽고 [mcve]를 게시 할 수 있습니다. – Olaf

+6

당신이 제공해야하는 정보는 귀하가 시도한 것을 보여주는 [Minimal, Complete, Verifiable example] (http://stackoverflow.com/help/mcve)입니다. –

답변

1

간단한 해결책은 이미 이있는 것을 고려하여 모든 단계를 두 단계로 수행하는 것일 수 있습니다. 기본적으로 당신은 마치 long long 부호없는 intlong unsigned ints가 인 것처럼 행동합니다.

이것은 작업해야하는 체인 길이를 두 배로 늘리고 필요한 작업 수를 4 배로 늘리지 만 걱정하지 않아도된다면 나머지 lu와 다음 lu를 나눌 수 있습니다. llu, 이것은 당신에게 lu보다 적은 양을줍니다. 즉

, 당신이 LLU보다 큰 뭔가가 필요하지만, 아무것도으로는 루와 전체 작업을 한 다음 사용할 수있는이 작업에 대한 뭔가 큰이 합니다 - LLU.

관련 문제