按题目写了一下,不知对否。
#include
struct fraction
{
int numerator; // 分子
int denominator; // 分母
int symbol; // 符号,分子为负时取值为-1,为正时取值为1,其它取值无意义
};
int scan_frac(struct fraction *f, struct fraction *g)//按题目格式输入两个分数,存入f和g所指的内存中。
{
printf("Input format: a/b*c/d\n");
if (scanf("%d/%d*%d/%d",&f->numerator,&f->denominator,&g->numerator,&g->denominator)!=4 ||
f->numerator==0 || f->denominator==0 || g->numerator==0 || g->denominator==0)
return 0;
f->symbol = f->numerator<0 ? -1 : 1;
g->symbol = g->numerator<0 ? -1 : 1;
f->numerator *= f->symbol;
g->numerator *= g->symbol;
return 1;
}
struct fraction multiply_frac(struct fraction *f, struct fraction *g)//返回分数f和g的乘积
{
struct fraction result;
result.numerator = f->numerator * g->numerator;
result.denominator = f->denominator * g->denominator;
result.symbol = f->symbol * g->symbol;
int min = result.numerator
for (; min>1; --min)
if ((result.numerator%min)==0 && (result.denominator%min)==0)
break;
if (min > 1)
{
result.numerator /= min;
result.denominator /= min;
}
return result;
}
int main()
{
struct fraction f1, f2, product;
while (scan_frac(&f1, &f2))
{
product = multiply_frac(&f1, &f2);
if(product.symbol == -1)
printf("-");
printf("%d/%d\n", product.numerator, product.denominator);
}
return 0;
}