|
님이 약간 오해를 하신 듯 합니다. 원래의 질문을 하신 분은 __int64 등의 데이터 타입 사용을
모르기 때문에 이러한 글을 올렸다고 생각되지 않네요. 교수님이 내주신 문제가
그러한 큰 수의 연산을 가능하게 하는 클래스(사용자의 새로운 자료형)를 만들라는 것이지..
__int64등의 predefined type을 응용하라는 얘기는 아닌듯 싶습니다. 그럼...
-locke
김백일 님이 쓰신 글 :
: 송득보 님이 쓰신 글 :
: : 기존 컴퓨터 시스템으로 지원되지 않는 큰 범위의 실수 혹은 정수를 저장/연산할 수 있는 클래스를 만들라는 것 같네요.
:
: 빌더에서는 __int64 라는 64비트 정수 타입을 지원합니다.
: __int64 는 -9223372036854775808 <= x <= 9223372036854775807 (약 922경, 9.2E18)
: unsigned __int64 는 0 <= x <= 18446744073709551616 (약 1844경, 1.8E19)
:
: 왠만한 경우에는 이 범위내에서 작업하실 수 있으실 겁니다.
:
: 실수의 경우에는 80비트 실수 타입인 long double이 있습니다.
: 범위는 3.37E-4932 < |X| < 1.18E4932
: 유효자리수는 18자리이지요.
:
: : 예를 들어... signed long int 가 ~21억 ~ 21억 범위 정도잖아요? 256조라든가...2경3627조..혹은
: : 유효자리수가 훨씬 더 많은 소수까지 표현할 수 있는 클래스...물론 출력도 지원을 해야하구요..
: : 제가 예전에 선배형님이 문제를 내주셔서 이런 비슷한 클래스를 tc++로 짜본적이 있거든요.
: : 그때가 한 7~8년 전인거 같은데.. 사칙연산 다 되고.. 근데 정수만 처리했던게 다르다면
: : 다른 결과인듯 싶습니다.. 그걸 짜게 만들었던 선배형의 문제가...
: :
: : 1*2*3*4*5*...*99*100 = 100!
:
: 이런 경우처럼 상당한 횟수의 곱셈이 필요할 때는
: 로그를 취해서 덧셈으로 계산하면 됩니다.
:
: exp(log 1 + log 2 + log 3 + ... + log 100)
:
: 정확한 값이 필요없다면 이렇게 하는 것이 훨씬 빠릅니다.
:
: : 을 처리하여 답변을 출력하는 문제였던것 같네요. (기억이 가물..) 답의 수가 워낙 커서..
: : 한 200여자리 이상 됐던것 같네요. 지금도 어딘가 찾아보면 소스가 있을지도..
: :
: : -locke
: :
: : ps: 클래스의 초기화는 정수로 하고.. 나누셈등의 연산시 유효자리와 범위가 더 큰 실수의 결과값을 리턴하는 함수를 추가로 구현하라는 얘기아닌가요?
: :
: : 박희중 님이 쓰신 글 :
: : : 다름이 아니라...밑에 나온 문제가 정확히 무슨말을 하는지 잘 몰라서 그럽니다.
: : : 어떻게 하라는건지 문제 해석이나 실행을 시킬때 어떻게 하는지만 좀 가르쳐 주세요.
: : : 솔직히 숙제 입니다만..숙제를 대신 해 달라고 하는게 아니라..
: : : 어떻게 하는지만 읽어 보시고 힌트나 아님 문제의 정확한 해석만이라도
: : : 해 주셨으면 합니다.
: : :
: : : 2002. 05. 12.
: : :
: : : * 개요
: : : 1. 큰 정수를 처리하기 위한 클래스를 정의한다.
: : : 2. 이 클래스는 다양한 연산과 멤버 함수들을 제공한다.
: : : 3. 큰 소수를 얻을 수 있는 함수를 구현한다.
: : :
: : : * 처리 방식
: : : 1. main() 함수는 기본적으로 함수 f()를 호출한다. 이 함수는 별도로 제공되는 파일에 포함되어 있으며 제출된 프로그램과 분리컴파일/링크/실행된다.
: : : 2. 클래스의 이름은 Number로 한다.
: : :
: : : * 클래스의 골격
: : : 1. 클래스 멤버 변수의 구성은 프로그래머에게 맡긴다.
: : : 2. 생성자와 소멸자를 제공한다.
: : : 가. Number n(30); /* 정수 30을 의미 */
: : : 나. unsigned a[10]={1,2,3,4,5,6}; Number m(5,a);
: : : /* 1*2^4L + 2*2^3L + 3*2^2L + 4*2^L + 5 */
: : : /* L 은 프로그래머가 직접 정의할 필요가 없음 */
: : : 다. Number k(n); Number k=n /* 복사 생성자 */
: : : 3. 기본적으로 제공되어야 할 연산자
: : : 가. 사칙연산 및 나머지 연산
: : : 나. 증감연산
: : : 다. 대소비교
: : : 라. 표준출력
: : : 4. 기본적으로 제공되어야 할 멤버함수
: : : 가. int isprime() : 객체가 소수이면 1, 아니면 0
: : : 나. Number prime(int k); k 번째 소수를 반환
: : : 다. Number primes(Number n); n 이하의 소수의 개수
: : :
: : :
: : : 한달 전에 나온건데..1번은 나름대로 풀었는데..
: : :
: : : 2번째 문제는 문제 해석이 제대로 되지 않아 아직 손을 못대고 있습니다..
: : :
: : : 어떻게 해석을 해야 하는지 좀 가르쳐 주세요..
: : :
: : : 나름대로는 숫자를 넣으면 그게 소수인지 판단 하라는 프로그램이라 생각하는데....
: : :
: : : 도저히 그게 아닌거 같아 이렇게 질문 합니다..
: : :
: : : 소수 판별인데..그 숫자가 큰 숫자를 다루라는 말인가요??
: : :
: : : 아..그리고 하나만 더...
: : :
: : : 256진법으로 숫자를 다룰때..어떻게 해야 합니까..
: : :
: : : 조금의 힌트만이라도 좀 가르쳐 주세요..
: : :
: : : 그럼 좋은 하루 되세요..
: : :
: : :
|