Solución a la Tarea 1: Unidades británicas de longitud

Hay al menos dos formas de resolver esta tarea. En la primera (que es la que casi todos siguieron) se debe dividir u entre 8*220*3*12 para calcular m y el residuo de esa división se debe dividir entre 220*3*12 para calcular f y el residuo de esa división se debe dividir entre 3*12 para calcular y y el residuo de esa división se debe dividir entre 12 para calcular p y el residuo de esa división es q.

En la segunda forma, se pueden hacer las operaciones al revés: q es el residuo de u al dividirlo por 12, p es el residuo de lo que queda al dividirlo por 3, y es el residuo de lo que queda al dividirlo por 220, f es el residuo de lo que queda al dividirlo por 8 y ésta última división da el valor de m.

#include <stdio.h>
 
int main(void)
{
  long u, m, f, y, p, q;
 
  scanf("%ld", &u);
  q = u % 12;
  u = (u - q) / 12;
  p = u % 3;
  u = (u - p) / 3;
  y = u % 220;
  u = (u - y) / 220;
  f = u % 8;
  m = (u - f) / 8;
  printf("%ld %ld %ld %ld %ld\n", m, f, y, p, q);
  return 0;
}

Los valores de entrada y salida empleados para la evaluación fueron los siguientes:

Entrada        Salida
4              0 0 0 0 4
400            0 0 11 0 4
40000          0 5 11 0 4
4000000        63 1 11 0 4
400000000      6313 1 11 0 4
31             0 0 0 2 7
3141           0 0 87 0 9
314159         4 7 146 1 11
31415926       495 6 144 1 10
1141592657     18017 4 107 0 5

Para probar su tarea en UNIX, escriban la instrucción gcc unbritNN.c -o unbrit para compilar su programa, y la instrucción ./unbrit para correrlo. Algunos errores comúnes fueron: (a) Leer int como long o viceversa. (b) Imprimir letreros de cualquier tipo e incluso usar conio.h, lo cual estaba explícitamente prohibido. (c) Todo tipo de conversiones mal hechas. (d) Aunque no es un error, lo mejor era usar enteros para las operaciones, pues los cálculos con flotantes son inexactos. Además, les recuerdo que sólo deben enviar el archivo .c y que éste debe tener el nombre correcto.