a la russe 알고리즘 .. 좋은거 하나 배우네요 -
http://blog.naver.com/lovely_hanga/60019576608
나눗셈 알고리즘도 생각나거든 알려주세요
그런데 문제는 굉장히 긴 숫자라는겁니다.
굉장히 긴 숫자 string을 char배열에 넣는거 자체가 쉽지 않을것 같은데요...
String "255" 는 buf[0]=0xFF 이렇게 넣으면 되고
String "256" 은 buf[0]=0x01, buf[1]=0x00; 이렇게 넣으면 되죠
하지만 String이 "12431234132412341435732457239547293750293750234572390759234134523545" 처럼
긴 숫자는 char buf에 어떻게 넣죠?
INT64 가 지원하는 크기 안이라면?
그냥 StrToInt 하면 되지만?
그영역을 벗어난다면 어떻게 하죠?
참..
첨부파일은 직접 만들어본것인데 문제가 있나 확인좀 해주시겠어요?
계산속도가 엄청 느립니다.
곱셈/나눗셈의 경우 자릿수가 수십자리되면 1천번정도 하는데 수초씩이나 걸립니다.
그럼..
Lyn 님이 쓰신 글 :
: 그런 나눗셈/곱셈을 구현하실때는..
:
: 10진수로 두고 계산하시기보단 2진수로 변환해서 계산하는게 편할겁니다.[즉 char 배열에 0과 1만 넣고...]
: CPU내부에서 사용하는 곱셈/나눗셈 알고리즘이 있거든요.
: 10진수로 생각하고 계산하는것보다 빠릅니다.
:
: 곱셈알고리즘은 a la russe 인가.. 하는 이름이 붙어있었는데
: 나눗셈은 까먹었네요 ^-^;
:
: 장성호 님이 쓰신 글 :
: : 제 생각에도 string으로 처리해야 할것 같구요
: :
: : 컴퓨터에서
: :
: : 곱셈은 덧셈의 반복이라는 얘기 들어보셨습니까?
: : 나눗셈은 뺄셈의 반복으로 보시면 될것입니다.
: :
: : 그렇다면 핵심은
: : 덧셈과 뺄셈이죠
: :
: : 덧셈과 뺄셈만 완벽하게 된다면
: : 그것을 응용해서 곱셈과 나눗셈도 가능할것입니다.
: :
: : 단 곱셈과 나눗셈할때 그냥 단순히 반복하면 좀 문제가 될것입니다.
: :
: : 그럼..
: :
: :
: : 열혈제자 님이 쓰신 글 :
: : : 요번에 계산기짜는것이 있는데요 보통계산기면 쉽게하겠지만 아주 큰숫자
: : : 50자리나 되는것을 계산하게만드는거거든요 곱하기까지는 어떻게했는데
: : : 나누기가 어떤원리로 접근해야할지몰라서요
: : : 배열로 숫자와 연산자를 한꺼번에 받아 계산을 하려고하거든요
: : :
: : :
: : : while((a[size]=getchar())!='\n')
: : : {
: : : ++size;
: : : }
: : :
: : : while(a[j]!='\n')
: : : {
: : : if(a[j]=='%')
: : : {
: : : b[j]='\0';
: : : break;
: : : }
: : : b[j]=a[j];
: : : ++j;
: : : }
: : : j=j+1;
: : :
: : : while(a[j]!='\n')
: : : {
: : : c[k]=a[j];
: : : ++k;
: : : ++j;
: : : }
: : : c[k]='\0';
: : :
: : :
: : : /* string에서 숫자 만들기 */
: : :
: : :
: : : for(i=strlen(b),j=N;i>=0;i--,j--)
: : : {
: : :
: : : b_n[j] = b[i] - 0x30;
: : : }
: : : for(i=strlen(c),j=N;i>=0;i--,j--)
: : : {
: : : c_n[j] = c[i] - 0x30;
: : : }
: : : 큰배열에 모든것넣고 두개의 배열로 나누어서 나누기를 해야하는데
: : : char 배열쓰니까 어떻게 나누기를해야할지감이 안잡혀서요 약간의
: : : 팁좀부탁드렸으면합니다.