// Program that uses eucilid's algorithm to compute the gcd of two // numbers. Input and output is done in decimal. // This table is used by printn to print the results of the calculation // in decimal. const d0 = 1; const d1 = 10; const d2 = 100; const d3 = 1000; const d4 = 10000; const d5 = 100000; const d6 = 1000000; const d7 = 10000000; const d8 = 100000000; const d9 = 1000000000; main { word a; word b; word r; while (true) { out "a> "; a = getdecinum(); out "b> "; b = getdecinum(); r = gcd(a, b); out "The gcd of "; printn(a); out " and "; printn(b); out " is "; printn(r); out "\n"; } } // Comput the gcd by euclid's algorithm. method gcd(word m, word n) { while (m >= n) { m = m - n; } if (m == 0) return n; return gcd(n, m); } // Read in and return a decimal number. method getdecinum() { word num; word c; num = 0; while ((c = in) != '\n') { if (c < '0') continue; if (c > '9') continue; num = num * 10 + (c - '0'); out c; } out c; return num; } // Print a single digit. (Called by printn) method printdigit(word d, word n, word oldn) { word a; a = 0; while (n >= d) { a = a + 1; n = n - d; } if (a == 0 && n == oldn) return n; out a + '0'; return n; } // Prints a decimal number. method printn(word oldn) { word n; n = oldn; n = printdigit(const d9, n, oldn); n = printdigit(const d8, n, oldn); n = printdigit(const d7, n, oldn); n = printdigit(const d6, n, oldn); n = printdigit(const d5, n, oldn); n = printdigit(const d4, n, oldn); n = printdigit(const d3, n, oldn); n = printdigit(const d2, n, oldn); n = printdigit(const d1, n, oldn); n = printdigit(const d0, n, 0 - 1); return 0; }