c·c++/c 프로그래밍

200!+300!+400!

바로이순간 2012. 1. 15. 16:42

200!+300!+400!를 c언어로 계산해서 표시할려면 어떻게 해야하나요?

프로그램설명좀해주세요

-----------------------------------------------------------------------------

구해드릴 수는 있는데 파이썬으로 짜면 정말 간단히 구할수 있거든요.

c언어에서도 bigint같은 라이브러리를 사용하면 금방 구할 수 있습니다.


하지만 그런 라이브러리를 쓰지 않고 구할 수 있는 방법을 알려드리겠습니다.

우선 큰수를 나타내는 아주 원시적인 한가지 방법입니다.

(나중에는 좀더 나은 방법을 생각해 내면 되겠습니다.)


정수 배열을 1000개 짜리를 잡습니다.

배열의 방한개 마다 10진법의 한 자리씩을 보관합니다.


예를 들어서 1234 (일천 이백 삼십 사)라는 수는

data1[0]=4; data1[1]=3; data1[2]=2; data1[3]=1;

과 같은 방법으로 나타냅니다.


[1] 곱셈을 어떻게 하느냐?


1234*123을 해 보겠습니다. data1의 각 셀에 123을 모두 각각 곱합니다.

그러면 data1[0] 은 492, data1[1]은 369, data1[2] 는 246, data1[3]은 123 의 값을 가지고 있습니다.


이제 data1[0]에는 2만 남기고 49를 data1[1]에 더해 줍니다.

그러면 data1[1] 의 값은 418이 됩니다.


data1[1]에는 8만 남기고 41을 data1[2] 에 더해 줍니다.

그러면 data1[2] 의 값은 287이 됩니다.


data1[2]에는 7만 남기고 28을 data1[3] 에 더해 줍니다.

그러면 data1[3] 의 값은 151이 됩니다.


data1[3] 에는 1만 남기고 15를 data1[4] 에 더해 줍니다.

그러면 data1[4] 의 값은 15가 됩니다.


data1[4] 에는 5만 남기고 1을 data1[5] 에 더해 줍니다.

그러면 data1[5] 의 값은 1이 됩니다.


위의 결과는 151782 로 제대로 나왔습니다.

이런 방식으로 곱셈을 해 나가면 됩니다.


[2] 덧셈도 같은 방법으로 해 나갑니다.


파이썬 프로그램 입니다. 정말 간단 하지요!!


def fac(n):
    f=1
    for x in range(1,n+1):
        f=f*x
    return f
print fac(200)+fac(300)+fac(400)


답입니다.


64034522846623895262347970319503005850702583026002959458684445942802397169186831

43627847864746326467629435057503585681084829816288351743522896198864680299793734

16541508381624264619423523070462443250151144486708906627739149181173319559964407

09549671345290783077834651351846832963742092370174761256055801454889426126505025

18685952704840143086515980930891270196352167685951316037057576646162142439666266

79699575851498167752764342269085663517365358636821564920521673368040439201169963

28496738035153787510930353505809106488781745199687507829633021854697472161801200

24473165192643468599654901856569821142160467123349971500178509567890804622657017

13057417692463313450754135646282551685144608489681563818768654635069499745398989

54109322820875124655980679885267853091768969537647966403136449735581675845778922

222789623703897374720000000000000000000000000000000000000000000000000

'c·c++ > c 프로그래밍' 카테고리의 다른 글

비쥬얼 씨++ 64비트 정수사용법  (0) 2012.01.18
문자열은 어디에 저장되는가  (0) 2012.01.18
wxWidgets이 뭔가요?   (0) 2012.01.14
폰트로 사각형 그리기   (0) 2012.01.14
Visual Studio 사용법  (0) 2011.12.31