Study - Programming/C/C++2007. 8. 29. 01:17

int pow(int num1, int num2)//대충 보고 알수 있음
{
     int i;
     int result = 1;

     for(i = 0 ; i < num2 ; i++)
     {
          result *= num1;
     }

     return result;
}

//원리 : 2 * 9 = 2 * (2 ^ 3 + 2 ^ 0) = 2 * (2^3) + 2*(2^0)
//곱할 수(9)를 2로 인수분해 함

int mul(int num1, int num2)
{
     int i = 0;//루프 변수
     int result = 0;//결과

     while(num2 != 0)
     {
           //2로 인수 분해 - (1)2의 몇승을 해야num2의 초과직전인지 체크
          while(pow(2,i) < num2)
               ++;

          result += (num1 << i);//그 수만큼 num1의 시프트값을 결과값에 더한다

          num2 -= (int)pow(2,i);//그리고 2의 i승을 num2에서 뺀다
          i = 0;//루프 초기화
     }//num2가 모두 분해되어 0이 될때까지 루프

     return result;//결과값 리턴
}

int div(int num1, int num2)
{
     int i = 0;//루프 변수
     int result = 0;//결과

     while(num2 != 0)
     {
     //2로 인수 분해 - (1)2의 몇승을 해야num2의 초과직전인지 체크
     while(pow(2,i) < num2)
          i++;

     result += (num1 >> i);//그 수만큼 num1의 시프트값을 결과값에 더한다

     num2 -= (int)pow(2,i);//그리고 2의 i승을 num2에서 뺀다
     i = 0;//루프 초기화
     }//num2가 모두 분해되어 0이 될때까지 루프

     return result;//결과값 리턴
}

Posted by 머리