https://pintia.cn/problem-sets/994805260223102976/problems/994805287624491008
题目不难 说实话太麻烦了 建议把套路记住
#include <iostream>
#include <cmath>
using namespace std;
struct fenshu{
long long down, up;
};
int gcd(long long a, long long b){
if(b==0) return a;
else return gcd(b, a%b);
}
fenshu huajian(fenshu a){
if(a.down < 0){
a.up = -a.up;
a.down = -a.down;
}
if(a.up == 0)
a.down = 1;
else{
int d = gcd(abs(a.up), abs(a.down));
a.up /= d;
a.down /= d;
}
return a;
}
fenshu jia(fenshu a, fenshu b){
fenshu result;
result.down = a.down * b.down;//通分
result.up = a.up*b.down + b.up*a.down;
return huajian(result);
}
fenshu jian(fenshu a, fenshu b){
fenshu result;
result.down = a.down * b.down;//通分
result.up = a.up*b.down - b.up*a.down;
return huajian(result);
}
fenshu cheng(fenshu a, fenshu b){
fenshu result;
result.down = a.down * b.down;//通分
result.up = a.up * b.up;
return huajian(result);
}
fenshu chu(fenshu a, fenshu b){
//就是与b的倒数相乘
fenshu result;
result.down = a.down * b.up;//通分
result.up = a.up * b.down;
return huajian(result);
}
void show(fenshu a){
a = huajian(a);
if(a.up < 0) printf("(");
if(a.down == 1) printf("%lld", a.up);//分数为整数
else if(abs(a.up) > abs(a.down)) printf("%lld %lld/%lld", a.up/a.down, abs(a.up%a.down), a.down);
else printf("%lld/%lld", a.up, a.down);
if(a.up < 0) printf(")");
}
int main(){
fenshu a, b, r1, r2, r3;
scanf("%lld/%lld %lld/%lld", &a.up, &a.down, &b.up, &b.down);
//加减乘运算
r1 = jia(a, b); r2 = jian(a, b); r3 = cheng(a, b);
show(a); printf(" + "); show(b); printf(" = "); show(r1); printf("\n");
show(a); printf(" - "); show(b); printf(" = "); show(r2); printf("\n");
show(a); printf(" * "); show(b); printf(" = "); show(r3); printf("\n");
//除运算
show(a); printf(" / "); show(b); printf(" = ");
if(b.up == 0)
printf("Inf");
else
show(chu(a, b));
return 0;
}
本文介绍了一个使用C++实现的分数运算程序,包括分数的加、减、乘、除等基本运算,并通过结构体和自定义函数实现了分数的简化与显示。
3049

被折叠的 条评论
为什么被折叠?



