1 #include <stdio.h>
    2 #include <math.h>
    3 #include <stdlib.h>
    4 
    5 typedef struct
    6   {
    7     char name[200];
    8     int a;
    9     int b;
   10     int c;
   11     int sigdig;
   12   }box;
   13 
   14 
   15 void getInput(int *cases, box **boxes)
   16 {
   17   int x;
   18   box *b;
   19   scanf ("%d\n", cases);
   20   *boxes = malloc(*cases * sizeof(box));
   21   b = *boxes;
   22   for (x = 0;  x < *cases; x++)
   23     {
   24       scanf("'%[^']' %d %d %d %d ", b[x].name, &(b[x].a), &(b[x].b), &(b[x].c), &(b[x].sigdig));
   25       /*printf("%s\n", b[x].name);*/
   26     }
   27 }
   28 
   29 int sigdigit (int area, int sigdig)
   30 {
   31   int temp;
   32   int digits = 0;
   33   int i;
   34 
   35   temp = area;
   36   while (temp > 0)
   37     {
   38       temp = temp/10;
   39       digits++;
   40     }
   41   digits = digits - sigdig;
   42   for (i = 0; i < digits; i++)
   43     {
   44       area = area/10;
   45     }
   46   for (i = 0; i < digits; i++)
   47     {
   48       area = area*10;
   49     }
   50   return area;
   51 }
   52 
   53 void process (int cases, box *boxes)
   54 {
   55   int x;
   56   int area;
   57   box b;
   58 
   59   for (x = 0; x < cases; x++)
   60     {
   61       /* printf ("processing %s\n", boxes[x].name); */
   62       b = boxes[x];
   63       area = (2 * b.b * b.c) + (2 * (b.a+3) * b.b) + (b.a * b.c) + ((b.a+3)*b.c);
   64       area = sigdigit(area, b.sigdig);
   65       printf("%s requires %d square frightometers of paper to wrap\n", b.name, area);
   66     }
   67 }
   68 
   69 int main ()
   70 {
   71   box *boxes;
   72   int cases;
   73   getInput(&cases, &boxes);
   74   process(cases, boxes);
   75   return 0;
   76 }
   77