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

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

分数的乘法

#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 multi(Fraction f1, Fraction f2)
{
  Fraction result;
  result.up = f1.up * f2.up;
  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 = multi(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 divide(Fraction f1, Fraction f2)
{
  Fraction result;
  result.up = f1.up * f2.down;
  result.down = f1.down * f2.up;
  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 = divide(f1, f2);
  showResult(res);
  return 0;
}

本模板来自:本文代码模板来自《算法笔记》,书籍如下图所示:

2.png


相关博客:分数的加减乘除

目录
相关文章
|
7月前
|
测试技术
【动态规划】【字符串】【表达式】2019. 解出数学表达式的学生分数
【动态规划】【字符串】【表达式】2019. 解出数学表达式的学生分数
|
7月前
数学中的函数
数学中的函数
99 1
|
7月前
|
算法 测试技术 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 项。
271 0
|
项目管理
求组合数(模板)【组合数学】
求组合数(模板)【组合数学】
154 0
求组合数(模板)【组合数学】
|
算法
分数的加减乘除
分数的加减乘除
166 0
分数的加减乘除
具体数学-第3课(递归式转化为求和求解一)
今天讲了一种将递归式转化为求和的方法。
102 0
具体数学-第3课(递归式转化为求和求解一)
具体数学-第3课(递归式转化为求和求解二)
今天讲了一种将递归式转化为求和的方法。
126 0
具体数学-第3课(递归式转化为求和求解二)
数学:分数的加减乘除模板(一)
数学:分数的加减乘除模板
75 0
|
测试技术
分数化小数(数学)
分数化小数(数学)