数学:分数的加减乘除模板(一)

简介: 数学:分数的加减乘除模板

数学:分数的加减乘除

  • 分数的表示
  • 分数的化简
  • 分数的加法
  • 分数的减法
  • 分数的乘法
  • 分数的除法


分数的表示

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) result.down = 1;
  else
  {
    int d = gcd(abs(result.up), abs(result.down));
    result.up /= d;
    result.down /= d;
  }
  return result;
}

分数的加法

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <map> 
using namespace std;
int gcd(int a, int b)
{
  if (b == 0) return a;
  else return gcd(b, a % b);
}
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) result.down = 1;
  else
  {
    int d = gcd(abs(result.up), abs(result.down));
    result.up /= d;
    result.down /= d;
  }
  return result;
}
Fraction add(Fraction f1, Fraction f2)
{
  Fraction result;
  result.up = f1.up * f2.down + f2.up * f1.down;
  result.down = f1.down * f2.down;
  return reduction(result);
}
void showResult (Fraction r)
{
  r = reduction(r);
  if (r.down == 1) printf("%d", r.up);
  else if (abs(r.up) > r.down)
    printf("%d %d/%d", r.up / r.down, abs(r.up) % r.down, r.down);
  else printf("%d/%d", r.up, r.down);
}
int main()
{
  Fraction f1, f2;
  scanf("%d%d", &f1.up, &f1.down);
  scanf("%d%d", &f2.up, &f2.down);
  Fraction res = add(f1, f2);
  showResult(res);
  return 0;
}

分数的减法

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <map> 
using namespace std;
int gcd(int a, int b)
{
  if (b == 0) return a;
  else return gcd(b, a % b);
}
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) result.down = 1;
  else
  {
    int d = gcd(abs(result.up), abs(result.down));
    result.up /= d;
    result.down /= d;
  }
  return result;
}
Fraction minu(Fraction f1, Fraction f2)
{
  Fraction result;
  result.up = f1.up * f2.down - f2.up * f1.down;
  result.down = f1.down * f2.down;
  return reduction(result);
}
void showResult (Fraction r)
{
  r = reduction(r);
  if (r.down == 1) printf("%d", r.up);
  else if (abs(r.up) > r.down)
    printf("%d %d/%d", r.up / r.down, abs(r.up) % r.down, r.down);
  else printf("%d/%d", r.up, r.down);
}
int main()
{
  Fraction f1, f2;
  scanf("%d%d", &f1.up, &f1.down);
  scanf("%d%d", &f2.up, &f2.down);
  Fraction res = minu(f1, f2);
  showResult(res);  
  return 0;
}



目录
相关文章
|
2月前
|
测试技术
【动态规划】【字符串】【表达式】2019. 解出数学表达式的学生分数
【动态规划】【字符串】【表达式】2019. 解出数学表达式的学生分数
|
2月前
数学中的函数
数学中的函数
38 1
|
17天前
1034 有理数四则运算 (20 分)
1034 有理数四则运算 (20 分)
|
2月前
|
算法 测试技术 C#
【数学】 【分数】 【字符串】972. 相等的有理数
【数学】 【分数】 【字符串】972. 相等的有理数
|
C语言
C语言:分数序列求和
题目:有一个分数序列:2/1 + 3/2 + 5/3 + 8/5 +...,求出这个数列的前 20 项之和。 背景:无。 思路:采用 for 循环,利用数学知识 分子:第 n 项 = 第 n - 1 项 + 第 n - 2 项。 分母:第 n 项 = 第 n - 1 项 + 第 n - 2 项。
202 0
|
存储 算法 C语言
【Python 百炼成钢】 小学生算术、阶乘的精确值、孪生素数、6174问题
【Python 百炼成钢】 小学生算术、阶乘的精确值、孪生素数、6174问题
180 0
【Python 百炼成钢】 小学生算术、阶乘的精确值、孪生素数、6174问题
|
算法
数学:分数的加减乘除模板(二)
数学:分数的加减乘除模板
60 0
数学:分数的加减乘除模板(二)
7-237 有理数加法 (15 分)
7-237 有理数加法 (15 分)
87 0
|
算法
分数的加减乘除
分数的加减乘除
104 0
分数的加减乘除
具体数学-第4课(多重求和方法二)
今天讲了多重求和,也就是一个和式由多个下标来指定。 首先是最简单的形式
142 0
具体数学-第4课(多重求和方法二)