#include<stdio.h>
#include<math.h>
long long int gcd(long long a, long long b) //求最大公約數
{
if (a%b == 0) return b;
else return gcd(b, a%b);
}
void huajian(long long *a, long long *b)
{
long long t = abs(gcd(*a, *b));
*a = *a / t;
*b = *b / t;
}
void relation(long long int div, long long int Div)
{
long long int k, kk;
if (Div == 0) printf("Inf"); //除數等于0
else if (div == 0)printf("%lld", div); //被除數等于0
else if (div > 0) //被除數大于0
{
huajian(&div, &Div);
if (div < Div) //真分數
{
printf("%lld/%lld", div, Div); //輸出
}
else { //假分數
k = div / Div; //整數部分
kk = div%Div;
if (kk== 0) //整除
printf("%lld", k);
else //非整除
{ //分子 //化簡
printf("%lld %lld/%lld", k, kk, Div);
}
}
}
else //被除數小于0
{
huajian(&div, &Div);
if (abs(div) < Div) //真分數
{
printf("(%lld/%lld)", div, Div);
}
else //假分數
{
k = div / Div; //整數部分
kk = div%Div;
if (kk == 0)
printf("(%lld)", k); //整除
else
{
printf("(%lld %lld/%lld)", k, abs(kk), Div);
}
}
}
}
void add_min_mul_div(long long int a, long long int b, char sign, long long int c, long long int d)
{
relation(a, b);
printf(" %c ", sign);
relation(c, d);
long long int a1, a2;
switch (sign)
{
case '+': a1 = a*d + b*c; a2 = b*d; break;
case '-': a1 = a*d - b*c; a2 = b*d; break;
case '*': a1 = a*c; a2 = b*d; break;
case '/': a1 = a*d; a2 = b*c; if (a2 < 0) { a1 = -a1; a2 = -a2; }break; //保證分母大于0
}
printf(" = ");
relation(a1, a2);
}
int main()
{
char sign[] = { '+','-','*','/' };
long long a, b, c, d;
scanf("%lld/%lld %lld/%lld", &a, &b, &c, &d);
for (int i = 0; i < 4; i++)
{
add_min_mul_div(a, b, sign[i], c, d); printf("\n");
}
//while (1);
return 0;
}

在網上看到一個和我的相似度挺高的代碼 https://www.jianshu.com/p/9f2e6f3c112c我這個和他哪里不同露了什么 崩潰了要 nnm
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/75986.html
標籤:C語言
上一篇:一個插入資料的問題
下一篇:相鄰的素數
