要求说明:在实际应用有很多时候我们希望计算机给出的结果是分数而不是小数,本程序就是在这个前提产生的,具体要求如下:如果用户输入形式是1,2,+,1,3则代表1/2+1/3,要求运算结果以分数形式体现。
//分数计算器
#include <stdio.h>
int gys(int x,int y) //求最大公约数
{
return y?gys(y,x%y):x; //递归,返回最大公约数
}
int gbs(int x,int y) //求最小公倍数
{
return x/gys(x,y)*y;
}
void yuefen(int fz,int fm) //约分
{
int s = gys(fz,fm);
fz /= s;
fm /= s;
printf("the result is %d/%d\n",fz,fm);
}
void add(int a,int b,int c,int d) //加法函数
{
int u1,u2,v = gbs(b,d),fz1,fm1;
u1 = v/b*a;
u2 = v/d*c;
fz1 = u1 + u2;
fm1 = v;
yuefen(fz1,fm1);
}
void mul(int a,int b,int c,int d) //乘法函数
{
int u1,u2;
u1 = a*c;
u2 = b*d;
yuefen(u1,u2);
}
void sub(int a,int b,int c,int d) //减法函数
{
int u1,u2,v = gbs(b,d),fz1,fm1;
u1 = v/b*a;
u2 = v/d*c;
fz1 = u1-u2;
fm1 = v;
yuefen(fz1,fm1);
}
void div(int a,int b,int c,int d) //除法函数
{
int u1,u2;
u1 = a*d;
u2 = b*c;
yuefen(u1,u2);
}
int main(int argc, char **argv)
{
char op;
int a,b,c,d;
scanf("%d,%d,%c,%d,%d",&a,&b,&op,&c,&d);
switch(op) //根据符号选择不同函数调用
{
case '+':add(a,b,c,d);break;
case '*':mul(a,b,c,d);break;
case '-':sub(a,b,c,d);break;
case '/':div(a,b,c,d);break;
}
return 0;
}
样例输入输出:
1,2,+,2,3
the result is 7/6
1,2,-,2,3
the result is 1/-61,2,*,2,3
the result is 1/31,2,/,2,3
the result is 3/4