#include <stdio.h>
void hj(long int a, long int b) //“化简并输出”函数
{
long int c=0,x=1,flag=0,ma,mb;
if(a<0 && b<0) {a=a*(-1); b=b*(-1);}
if(a<0 && b>0) {a=a*(-1); printf("(-"); flag=1;} //判断要化简分数的正负
if(a>0 && b<0) {b=b*(-1); printf("(-"); flag=1;}
c = a / b; //c保存整数部分
a = a - b*c;
if( a != 0 ) //分数部分不为0,则进行化简
{
ma = a;
mb = b;
x = mb % ma;
while( x!=0 ) //辗转相除,找最大公约数
{
mb = ma;
ma = x;
x = mb % ma;
}
a = a/ma;
b = b/ma;
}
if(c>0) //整数部分不为0
{
printf("%ld",c);
if(a) //分数部分不为0,则输出;为0则不输出
printf(" %ld/%ld",a,b);
}
if(!c) //整数部分为0
{
if(!a)
printf("0"); //a也为0,则输出0
else
printf("%ld/%ld",a,b);
}
if(flag) //原分数为负数,补齐括号
printf(")");
}
int main()
{
long int a,b,c,d,x1=0,y1=0,x2=0,y2=0,x3=0,y3=0,x4=0,y4=0;
scanf("%ld/%ld %ld/%ld",&a,&b,&c,&d);
x1 = a*d+b*c; y1 = b*d; //1234分别保存+-*/的四次运算结果
x2 = a*d-b*c; y2 = b*d;
x3 = a*c; y3 = b*d;
x4 = a*d; y4 = b*c;
hj(a,b);
printf(" + ");
hj(c,d);
printf(" = ");
hj(x1,y1);
printf("\n");
hj(a,b);
printf(" - ");
hj(c,d);
printf(" = ");
hj(x2,y2);
printf("\n");
hj(a,b);
printf(" * ");
hj(c,d);
printf(" = ");
hj(x3,y3);
printf("\n");
hj(a,b);
printf(" / ");
hj(c,d);
printf(" = ");
if(!y4) printf("Inf"); //被除数为0
else hj(x4,y4);
return 0;
}
1034 有理数四则运算,C
猜你喜欢
转载自blog.csdn.net/weixin_43916400/article/details/104518070
今日推荐
周排行