Contest100000590 - 《算法笔记》5.3小节——数学问题->分数的四则运算

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;
}

总结下:

分数的四则运算道理浅显,代码记住方法,会写即可

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李霁明

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值