본문 바로가기

Programming/Algorithm

1 과 0으로 계산기 만들기 - 1 -

이제 만들기 시작 !! 

더하기 빼기는 비교적 쉬웠다 더하기는 더하는 수만큼 +1 을 계속 해주면 되고, 

빼기는 꺼꾸로 예를 들어 x = a+b 면 빼기는 x-a = b 이런식으로 알고리즘을 작성하면 끝

밑에는 소스다 .


int Plus(int a, int b){

    int unsigned i = 0;

    

    

    

    while(1)

    {

        

        i = PlusOne(i);

        b = PlusOne(b);

        if(Equal(a, i))

            break;

        else

            continue;

        

    }

    return b;

}

 

int Min (int a, int b){

    

    int unsigned result = 0;

    while(1)

    {

        if (Equal(a, b))

            break;

    else

            result = PlusOne(result);

        b = PlusOne(b);

        

        continue;

    }

    return result;

}

 


곱셈도 a * b = x 라면 +1 을 a를 b 만큼  for 문을 두개를 돌려주면되고 

나눗셈도 역시 뺄셈같이 x /a = b 이런식으로 해주면 된다. 여기서 중요한점은

나머지다 나머지를 구해주고 몫에다가 더해주어야 나눗셈연산이 정확하게 된다. 그리고 나눗셈 함수는 몫과 나머지를 다가져와서 포인터로 함수를 만들었다.


int Mul(int a, int b){

    

    int unsigned i = 0;

    int unsigned j = 0,result=0;

    

    

    while (1) {

        

        while(1)

        {

            

            result = PlusOne(result);

            i = PlusOne(i);

            

            if(Equal(a, i))

                break;

            else

                continue;

            

            

        }

        

        j = PlusOne(j);

        i = 0;

        

        if(Equal(b, j))

            break;

        else

            continue;

        

        

    }

    return result;

}

 

 

int* Div(int a,int b){  // 나눗셈

    

    int unsigned i = 0, namuji = 0;

    int unsigned f_b, result = 0;

    int unsigned re_mul = 0// 몫과 b 

    int *resnam_sum = (int*)malloc(2) ;

    

    

    f_b = b; // 초기의 b 

    

    while (1) {

        

        if(Equal(a, b))

        {result = 1;

            

            break;

        }

        

        else

            result = PlusOne(result);

        

        while(1)

        {

           i = PlusOne(i);

            b = PlusOne(b);

            if(Equal(f_b, i))

                break;

            else

                continue;

            

        }

        i = 0;

        re_mul = Mul(f_b,result); //몫과 b 

      

        namuji = 0;

        

        while(1){   // b  몫의 곱에 나머지를 더해줌

            

            

            namuji = PlusOne(namuji);

            re_mul = PlusOne(re_mul);

   

            if (Equal(f_b, namuji))

                break;

           else if (Equal(a, re_mul))

               break;

 

           else

                continue;

        }

        

        

        if (Equal(a, re_mul))

            break;

        

        else

            continue;

    }