representação fracionária
//分数的表示
struct Fraction {
int up, down;//分子与分母
};
simplificando fracções
Pontuações simplificação deve atender a três princípios:
- Quando o denominador é negativo, enquanto que o numerador e denominador negada;
- Quando uma pontuação de zero (quando a molécula é zero), o denominador deve ser 1;
- O numerador eo denominador não contam (exceto com o máximo divisor comum) da Convenção, além de 1.
//求最大公约数
int gcd(int a, int b)
{
return !b ? a : gcd(b, a%b);
}
//分数的化简
Fraction reduction(Fraction result)
{
//原则一
if (result.down < 0)
{
result.down = -result.down;
result.up = -result.up;
}
//原则二
if (result.up == 0)
result.down = 1;
//原则三
else
{
int d = gcd(abs(result.up), abs(result.down));
//这里一定要记得取绝对值
result.down /= d;
result.up /= d;
}
return result;
}
saída fração
Observe os seguintes pontos:
- Antes de pontuação de saída para ser simplificada;
- Se o denominador é um, o que indica que o marcador é um número inteiro, geralmente molécula saída directa;
- Se a molécula é um valor absoluto maior que o denominador, que é a fracção impróprio, para ser produzido na forma de uma fracção mista;
- Não satisfazem a pontuação acima descrito é uma fração adequada, pois ele pode ser a saída.
//分数的输出
void showFraction(Fraction r)
{
//原则一:先进行化简
r = reduction(r);
//原则二:如果是整数
if (r.down == 1)
printf("%d", r.up);
//原则三:如果是假分数
if (abs(r.up) > abs(r.down))
{
int a = r.up / r.down;
r.up = abs(r.up) % r.down;//注意这里的绝对值
printf("%d %d/%d\n", a, r.up, r.down);
}
}
Nota: Uma vez que os pontos de partida e o processo de multiplicação pode causar mais do que o numerador ou denominador representa a gama do tipo int, portanto, em geral,Numerador e denominador para ser utilizado um armazenamento de longo tempo.