/* NM i programmering 2001 Løsningsforslag til oppgave A Skrevet av Dag Langmyhr (dag@ifi.uio.no) */ #include #include /* backw_to_i: Convert number `b' (on backwards text form) to normal integer. */ long backw_to_i (char *b) { char *p = b; long res = 0, fact = 1; while (*p) { res += (*p - '0')*fact; fact *= 10; ++p; } return res; } /* i_to_backw: Convert integer `i' to backwards text form in `b'. */ void i_to_backw (char *b, long i) { char *p = b; long v = i; if (v == 0) { /* Integer 0 needs special handling. */ strcpy(b, "0"); return; } while (v > 0) { *p++ = v%10 + '0'; v /= 10; } *p = '\0'; } /* strip_zero: Return pointer to first non-zero digit in `b' (or last digit if they are all zeroes). */ char *strip_zero (char *b) { if (*b=='0' && *(b+1)) return strip_zero(b+1); return b; } /* main: The main program, which reads pairs of backward numbers and adds them. */ int main (void) { FILE *in_f = fopen("backw.in","r"), *out_f = fopen("backw.out","w"); int n, i; fscanf(in_f, "%d", &n); for (i = 1; i <= n; ++i) { char num1[20], num2[20], res[20]; fscanf(in_f, "%s %s", num1, num2); i_to_backw(res, backw_to_i(num1)+backw_to_i(num2)); fprintf(out_f, "%s\n", strip_zero(res)); } fclose(in_f); fclose(out_f); return 0; }