곱셈은 해결이 되었거든요
더하기를 적절히 이용하여서 c로구현하였는데
나눗셈은 빼기원리를 적용하려고 해도 어떻게 해야할지 막막하네요
큰틀이라도 잡아주실수있으신가요
장성호 님이 쓰신 글 :
: 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 배열쓰니까 어떻게 나누기를해야할지감이 안잡혀서요 약간의
: : : : 팁좀부탁드렸으면합니다.