Ranking (as of 2013-01-19): 24
Language: C++
/*
UVa 332 - Rational Numbers from Repeating Fractions
To build using Visucal Studio 2008:
cl -EHsc -O2 UVa_332_Rational_Numbers.cpp
*/
#include <cstdio>
#include <cstdlib>
#include <cstring>
int gcd(int x, int y)
{
if (x < y)
return gcd(y, x);
else
return y == 0 ? x : gcd(y, x % y);
}
int main()
{
const int nr_digits_max = 9;
const int pow_10s[nr_digits_max + 1] = {
1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000
};
for (int case_nr = 1; ; case_nr++) {
int j;
scanf("%d", &j);
if (j == -1)
break;
char s[nr_digits_max + 3];
scanf("%s", s);
int k = strlen(s + 2) - j;
int n = static_cast<int>(strtol(s + 2, NULL, 10));
int numerator, denominator;
if (j) {
numerator = n - n / pow_10s[j];
denominator = pow_10s[k + j] - pow_10s[k];
}
else {
numerator = n;
denominator = pow_10s[k];
}
int g = gcd(numerator, denominator);
printf("Case %d: %d/%d\n", case_nr, numerator / g, denominator / g);
}
return 0;
}
No comments:
Post a Comment