Calculation error dutycycle for DC motor using PWM

I am getting error while calculating duty cycle for DC motor control

void setup(){
Serial.begin(9600);
}

void loop(){
unsigned char dutycycle = (255 * 300)/3700;
Serial.println(dutycycle);
}

Output:
Giving 2 instead of 20

And for (255 * 258)/3700 giving 0 instead of 17 and so on

Don't ask anything about above formula. I want to get things done correctly.

The default data type on 16bit arduino is int which has a maximum value of 32767 and 255*300=76500, so that is the problem.

unsigned char dc = (unsigned long)(255*300) / 3700;

Thank you for your quick reply

But it does not solved my problem I have checked the same thing is repeated

You need to cast the values to a data-type which is large enough to hold them. Try this then:

unsigned char dc = ((unsigned long)255 * (unsigned long)300) / 3700;

Or like this:

unsigned long ulv = 255;
ulv *= 300;
unsigned char dc = ulv / 3700;

Or like this

Even easier:

unsigned char dc = (255UL * 300UL) / 3700; // Spaces added because only a fool jams everything together in an unreadable mess

@PaulS
Sorry to that I had not put them in neet format but I am not a "FOOL".