:: 게시판
:: 이전 게시판
|
이전 질문 게시판은 새 글 쓰기를 막았습니다. [질문 게시판]을 이용바랍니다.
통합규정 1.3 이용안내 인용"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
11/05/18 22:02
음.. 방금 돌려보니 5^1000이 너무 커서 double로도 표현이 안되는게 문제인가보군요.
아마 변수를 2개 이상 써서 끊어서 출력해야 하는것 같은데.. 그래서 배열을 이야기 한것 같군요.
11/05/18 22:08
5^1000 을 윈도우 계산기로 계산하면 9.3326361850321887899008954472382e+698 이 나옵니다. 거의 700자리의 숫자지요 어마어마 하지 않습니까? C에서 사용하는 정수형의 int는 32bit 에서 기껏 40억 정도가 한계입니다. 한 10자리수쯤 되지요.
지금 같은 경우에는 기본 변수로는 계산할수 없고 직접 만들어야 합니다. 꼭 필요하고, 프로그래밍 연습을 하기에도 좋은 문제기 때문에 자료도 많이 있을겁니다. 구글에서 BigInt 를 키워드로 검색해보세요. 간단히는 질문자분 말씀처럼 배열로 사람이 곱셈하듯이 만들면 됩니다. 배열의 한요소를 숫자의 자릿수로 생각하고, 곱해서 숫자를 만들고, 자릿수에 맞춰서 더하고, 자릿수 올림을 반영하고, 이러한 일련의 과정을 직접 짜면 됩니다. 물론 제대로 만드는 것은 더 복잡한지라 저도 잘 모르겠네요 ;; 그리고 사족인데, DC 프로그래밍갤에가면 BigInt의 달인 '공비'님이 있습니다. BigInt 프로그램으로 힛갤에 글을올린 양반이지요 ㅡ_ㅡ;;
11/05/18 22:14
음..대충 배열(1000)개 잡고
다 0으로 만들어 준다음에 for loop 2개를 돌려주면서 그 안에서 각 배열을 아랫자리부터 5를 곱해주고 만약 곱해서 숫자가 10이 넘어가면 나머지만 남겨주고 윗 자리숫자에는 10으로 나눈 수를 더해줍니다. 이 과정을 for loop 안에서 하면 되겠네요.
11/05/18 22:22
음.. 디시 힛갤가서 공비님꺼 보고왔는데..
2의 10억승을 구하는 프로그램을 짜셨던데.. -_-;;쿨럭; 엄청나네요.. 답글달아주신 모든분들 감사합니다. since98 님이 써주신 방법 들으니까 할수 있을것 같기도 해서 도전해보고 오겠슴다! 감사합니당!!
11/05/18 23:04
공비님의 프로그램은 이중 루프는 필히 해야 되는 상태서 어떻게 3억 * 10억의 시간 복잡도를 각오하고 저걸 돌릴 생각을 했을까요 무섭네요-_-;;;;;;
11/05/18 23:20
C로 짜는 것과는 직접 상관은 없지만... Python은 임의의 길이의 정수를 지원합니다. 이걸로 미리 정답을 구한 다음 C 결과와 비교해 보는 것도 괜찮을 듯 합니다만...
PS) 방금 Python으로 해보니 (5**1000), 93326361850321887899008954472381716961709144637170802462171433979596691097577563 44544403270978811023595949899303242426242154875213540323948415208172039307562344 10666138325150273995075985901831511100490796265113118240512514795933790805178271 12541510381069837885442648111946981422866095922201766291044279845616944888714746 65280063283684526474292618298621652027931952894936071178506636687410654398055307 18136320599844826041954101213229629869502194514609904214608668361244792952034826 86461765792691604742006593638904173789582211836507804555662844427392538751712785 47967815563464037148776817668998553920692654394240087119736747017498626266907472 96762535803929376233833981046927874558605253696441650390625 이랍니다. 총 699자리네요. 그리고 시간은 의외로 거의 걸리지 않네요. 1초도 안 되는 것이, 정말 잘 짠듯.
|