我顺便把代码付上:
// flex.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "stdio.h"
#define ULONG unsigned long
typedef struct _NUMERATOR
{
ULONG Fraction;
ULONG Denominator;
}NUMERATOR,*PNUMERATOR;
ULONG GDivisor(ULONG a,ULONG b)
{
ULONG temp;
if(a > b)
a^=b^=a^=b;
for(;b;temp=a%b,a=b,b=temp);
return a;
}
ULONG LCM(ULONG a,ULONG b)
{
return a*b/GDivisor(a,b);
}
void NumeratorAdd(PNUMERATOR a,PNUMERATOR b)
{
ULONG g;
a->Fraction=a->Fraction*b->Denominator+a->Denominator*b->Fraction;
a->Denominator*=b->Denominator;
g=GDivisor(a->Fraction,a->Denominator);
a->Fraction/=g,a->Denominator/=g;
}
void NumeratorMul(PNUMERATOR a,PNUMERATOR b)
{
ULONG g;
a->Fraction*=b->Fraction;
a->Denominator*=b->Denominator;
g=GDivisor(a->Fraction,a->Denominator);
a->Fraction/=g,a->Denominator/=g;
}
int main()
{
NUMERATOR hr={5,7};
NUMERATOR a={3,25};
NUMERATOR b={3,7};
NumeratorMul(&hr,&a);
NumeratorAdd(&hr,&b);
printf("result = %u/%u\n",hr.Fraction,hr.Denominator);
return 0;
}