算法笔记-分数的表示和化简

1、使用结构体来存储分数的分子和分母

2、对分数指定规则

     1、使分母为非负数,如果分数为负,则令分子为负数即可

     2、如果分数为零,则规定分子为零,分母为1

     3、分子和分母没有除1以外的公约数

3、分数的化简

     1、若分母为负数,则令分子和分母都变为相反数

     2、若分子为零,则令分母为1

     3、约分,求出分子绝对值与分母绝对值的最大公约数,然后令分子分母同时除以公约数

#include<iostream>
using namespace std;
struct Fraction{
	int up,down;
};
int gcd(int a,int b)
{
	if(b==0)return a;
	else return gcd(b,a%b);
 } 
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;
}
//分数的输出
void showFraction(Fraction r)
{
	//原则一:先进行化简
	r = reduction(r);
	//原则二:如果是整数
	if (r.down == 1)//分母为0 
		printf("%d", r.up);//直接输出分子 
	//原则三:如果是假分数
	else if (abs(r.up) > abs(r.down))//分子大于分母 
	{
		int a = r.up / r.down;
		r.up = abs(r.up) % r.down;//注意这里的绝对值
		printf("%d %d/%d\n", a, r.up, r.down);
	}
	else{
		printf("%d/%d", r.up,r.down);//直接输出
	} 
}
int main()
{
    Fraction result;
    Fraction f;
    f.up = 7;
    f.down = 6;
    result = reduction(f);
    showFraction(result);
    return 0;
}

上一篇:题解 P2081 [NOI2012] 迷失游乐园


下一篇:mark down 学习