文章目录
Contest100000590 - 《算法笔记》5.3小节——数学问题->分数的四则运算
5.3小节——数学问题->分数的四则运算
5.3.1 分数的表示与化简
//5.3.1分数的表示与化简
struct Fraction//分数
{
int up,down;//分子、分母
};
Fraction reduction(Fraction result)
{
if(result.down < 0)//分母为负数,令分子分母都变为相反数
{
result.up = -result.up;
result.down = -result.down;
}
if(result.up == 0)//如果分子为0
{
result.down = 1;//令分母为1
}
else//如果分子不为0,进行约分
{
int d = gcd(abs(result.up),abs(result.down));//分子分母的最大公约数
result.up /= d;//约去最大公约数
result.down /= d;
}
return result;
}
5.3.2 分数的四则运算
5.3.3 分数的输出
分数类定义与操作代码汇总
struct Fraction//分数
{
int up,down;//分子、分母
};
Fraction reduction(Fraction result)
{
if(result.down < 0)//分母为负数,令分子分母都变为相反数
{
result.up = -result.up;
result.down = -result.down;
}
if(result.up == 0)//如果分子为0
{
result.down = 1;//令分母为1
}
else//如果分子不为0,进行约分
{
int d = gcd(abs(result.up),abs(result.down));//分子分母的最大公约数
result.up /= d;//约去最大公约数
result.down /= d;
}
return result;
}
Fraction add(Fraction f1,Fraction f2)//分数f1加上分数f2
{
Fraction result;
result.up = f1.up*f2.down + f2.up * f1.down;//分数和的分子
result.down = f1.down * f2.down;//分数和的分母
return reduction(result);//返回结果分数,注意化简
}
Fraction minu(Fraction f1,Fraction f2)//分数f1减去f2
{
Fraction result;
result.up = f1.up * f2.down - f2.up * f1.down;//分数差的分子
result.down = f1.down * f2.down;//分数差的分母
return reduction(result);//返回结果分数,注意化简
}
Fraction multi(Fraction f1,Fraction f2)//分数f1乘以f2
{
Fraction result;
result.up = f1.up * f2.up;//分数积的分子
result.down = f1.down * f2.down;//分数积的分母
return reduction(result);//返回结果分数,注意化简
}
Fraction divide(Fraction f1,Fraction f2)//分数f1除以分数f2,注意除数不能为0
{
Fraction result;
result.up = f1.up * f2.down;//分数商的分子
result.down = f1.down * f2.up;//分数商的分母
return reduction(result);//返回结果分数,注意化简
}
void showResult(Fraction r)//输出分数r
{
r = reduction(r);
if(r.down == 1) printf("%lld",r.up);//可能超出表示范围,因而用long long
else if(abs(r.up) > r.down)//假分数,转换为带分数输出
{
printf("%d %d",r.up/r.down,abs(r.up)%r.down,r.down);
}
else//真分数
{
printf("%d%d",r.up,r.down);
}
}
Codeup习题
Contest100000590 - 《算法笔记》5.3小节——数学问题->分数的四则运算
题目链接:http://codeup.cn/contest.php?cid=100000590
1067ProblemA分数矩阵
题目链接:http://codeup.cn/problem.php?cid=100000590&pid=0
//1067ProblemA分数矩阵
#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
int main()
{
int n;
while(cin>>n)
{
if(n==0)
break;
double sum = 0.0;
for(int i=n;i>=2;i--)
{
sum += 1.0/i*(n-i+1) * 2;//公式是规律总结,又因为矩阵对称,乘以2倍
}
sum += n;//加上对角线上数值
printf("%.2f\n",sum);
}
return 0;
}
总结下:
分数的四则运算道理浅显,代码记住方法,会写即可