[ create a new paste ] login | about

Link: http://codepad.org/rDMUxxMS    [ raw code | output | fork ]

C, pasted on Apr 15:
#include <stdio.h>

int multiply_1(unsigned int x,unsigned int y);
int multiply_2(unsigned int x,unsigned int y);
int multiply_3(unsigned int x,unsigned int y);

int main()
{
    unsigned int x,y;
    scanf("%u%u", &x,&y);
    
    printf("1. %u*%u=%u\n",x,y,multiply_1(x,y));
    printf("2. %u*%u=%u\n",x,y,multiply_2(x,y));
    printf("3. %u*%u=%u\n",x,y,multiply_3(x,y));

    return 0;
}

int multiply_1(unsigned int x,unsigned int y)
{
    unsigned int p=0;
    while(y-->0)
        p+=x;

    return p;
}

int multiply_2(unsigned int x,unsigned int y)
{
    unsigned int p=0;
    while(y)
    {
        if(y&1)
           p+=x;
        x<<=1;
        y>>=1;
    }
    return p;
}

int multiply_3(unsigned int x,unsigned int y)
{
    if(y==0)
        return 0;
    else if(y==1)
        return x;
    else
        return multiply_3(x,y>>1) + multiply_3(x,y-(y>>1)); // Use right shift 1 bit instead of divide by 2
}


Output:
1
2
3
1. 0*134514336=0
2. 0*134514336=0
3. 0*134514336=0


Create a new paste based on this one


Comments: