2010-03-26 4 views
0

C++의 매우 어리석은 프로젝트의 경우 VLI (Very Long Int)라고하는 긴 정수형 클래스를 만들고 있습니다. 그것이 작동하는 방식 (그들은 backboned 그것, 어리 석음을 위해 그들을 비난한다)커스텀 "Very Long Int"Division 문제

  1. 사용자 입력 최대 50 자리, 문자열로 입력됩니다.
  2. 문자열은 문자열을 배열에 역순으로 저장하는 미리 만들어진 Sequence 클래스에 저장됩니다.

즉, "1234"가 입력되면 [4 | 3 | 2 | 1]으로 저장됩니다.

그럼 내 질문은 다음과 같습니다. 이러한 문자 배열 만 사용하여 나누기를 수행하려면 어떻게해야합니까?

입력 답변이 32 자리 이상인 경우 int를 사용하여 물건을 확인할 수 없으며 기본적으로 여기에 긴 int를 사용하는 것은 부정 행위입니다.

모든 의견을 환영합니다. 필요한 경우 감사의 인사를 전합니다.

+1

: 여기

오래 부문 기술의 알림입니다 http://stackoverflow.com/questions/214706/c-or-c-bigint-library-on-microsoft-windows –

답변

3

초등학교에서 배운 장기 분할 알고리즘을 구현하십시오.

빼기를 구현하는 것으로 시작하십시오. 입력에서 임의의 숫자를 문자열 빼기 (string-subtract) 할 수있는 함수를 만듭니다. 그런 다음 결과가 부정적인지 여부를 감지 할 수 있어야합니다. 이 함수를 수정하여 빼기 전에 숫자가 문자열 이동되도록 허용하십시오.

+0

제수가'(1 << 32)/10'보다 작 으면 잘 작동합니다. – AShelly

+0

또한 큰 그룹의 증가 된 효율성을위한 숫자 - 반복을위한 하나의 여분 숫자 대신 5 또는 10 또는 뭔가를 사용하십시오. 추가 된 숫자로 나머지는'Int.MaxValue'를 깨뜨리지 않도록주의하십시오. – ANeves

+0

하지만 볼 수는 없습니다. 41 자리 숫자를 40 자리 숫자로 나눈 값은 어떻게됩니까? 그것이 내가이 사이트에있는 이유입니다. 32 Befall

1

학교 수학 서적을 꺼내십시오. 몇 년 전에 내가 학교에서 수동으로 나누었습니다. 그것은 정확히 같은 원리입니다 :)

1

Potatoswatter는 정확합니다. 필자는 과거에는 파스칼 프로그램을 작성하여 임의의 길이의 숫자를 문자열로 처리했으며, 제곱근도 계산할 수있었습니다. 그런 다음 그것을 당신이 다른 방식 모두를 살펴한다고하는 방법을 모르는 경우 그것을 않습니다 Long Division to Decimal Places