如何将两个分数相加?

2024-02-08

在 C# 中如何添加两个分数,如下所示:

11/6 + 3/4 = 31/12

然后你会如何简化答案?


周五晚上,无聊袭来……导致 Fraction 类的运算符超载。无法保证设计的严谨性。

它的工作原理是这样的...

Fraction left = "1/2";
Fraction right = "3/8";

Fraction result1 = ((left + right) * left / right).Simplify();
Console.WriteLine(result1);

Fraction test2 = "12/32";
test2 = test2.Simplify();
Console.WriteLine(test2);

实现如下所示...

public struct Fraction
{
    public int Numerator { get; set; }
    public int Denominator { get; set; }

    public Fraction(int numerator, int denominator)
        : this()
    {
        Numerator = numerator;
        Denominator = denominator;
    }

    public Fraction Simplify()
    {
        int gcd = GCD();
        return new Fraction(Numerator / gcd, Denominator / gcd);
    }

    public Fraction InTermsOf(Fraction other)
    {
        return Denominator == other.Denominator ? this :
            new Fraction(Numerator * other.Denominator, Denominator * other.Denominator);
    }

    public int GCD()
    {
        int a = Numerator;
        int b = Denominator;
        while (b != 0)
        {
            int t = b;
            b = a % b;
            a = t;
        }
        return a;
    }

    public Fraction Reciprocal()
    {
        return new Fraction(Denominator, Numerator);
    }


    public static Fraction operator +(Fraction left, Fraction right)
    {
        var left2 = left.InTermsOf(right);
        var right2 = right.InTermsOf(left);

        return new Fraction(left2.Numerator + right2.Numerator, left2.Denominator);
    }

    public static Fraction operator -(Fraction left, Fraction right)
    {
        var left2 = left.InTermsOf(right);
        var right2 = right.InTermsOf(left);

        return new Fraction(left2.Numerator - right2.Numerator, left2.Denominator);
    }

    public static Fraction operator *(Fraction left, Fraction right)
    {
        return new Fraction(left.Numerator * right.Numerator, left.Denominator * right.Denominator);
    }

    public static Fraction operator /(Fraction left, Fraction right)
    {
        return new Fraction(left.Numerator * right.Denominator, left.Denominator * right.Numerator);
    }

    public static implicit operator Fraction(string value)
    {
        var tokens = value.Split('/');
        int num;
        int den;
        if (tokens.Length == 1 && int.TryParse(tokens[0], out num))
        {
            return new Fraction(num, 1);
        }
        else if (tokens.Length == 2 && int.TryParse(tokens[0], out num) && int.TryParse(tokens[1], out den))
        {
            return new Fraction(num, den);
        }
        throw new Exception("Invalid fraction format");
    }

    public override string ToString()
    {
        return string.Format("{0}/{1}", Numerator, Denominator);
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将两个分数相加? 的相关文章

  • OpenCv读/写视频色差

    我试图简单地使用 openCV 打开视频 处理帧并将处理后的帧写入新的视频文件 我的问题是 即使我根本不处理帧 只是打开视频 使用 VideoCapture 读取帧并使用 VideoWriter 将它们写入新文件 输出文件看起来比输入更 绿
  • 如何在 Android NDK 中创建新的 NativeWindow 而无需 Android 操作系统源代码?

    我想编译一个 Android OpenGL 控制台应用程序 您可以直接从控制台启动 Android x86 运行 或者从 Android x86 GUI 内的 Android 终端应用程序运行 这个帖子 如何在 Android NDK 中创
  • 为什么要序列化对象需要 Serialized 属性

    根据我的理解 SerializedAttribute 不提供编译时检查 因为它都是在运行时完成的 如果是这样 那么为什么需要将类标记为可序列化呢 难道序列化器不能尝试序列化一个对象然后失败吗 这不就是它现在所做的吗 当某些东西被标记时 它会
  • C# 中的接口继承

    我试图解决我在编写应用程序时遇到的相当大的 对我来说 问题 请看这个 为了简单起见 我将尝试缩短代码 我有一个名为的根接口IRepository
  • 显示异常时的自定义错误消息:从客户端检测到潜在危险的 Request.Form 值

    我在我的 Web 应用程序中使用 ASP NET 的登录控件 当发生此异常时 我想在标签上显示一种有趣的错误类型System Web HttpRequestValidationException A potentially dangerou
  • POCO HTTPSClientSession 发送请求时遇到问题 - 证书验证失败

    我正在尝试使用 POCO 库编写一个向服务器发出 HTTPS 请求的程序 出于测试目的 我正在连接到具有自签名证书的服务器 并且我希望允许客户端进行连接 为了允许这种情况发生 我尝试安装InvalidCertificateHandler这是
  • 当前的 c++ 工作草案与当前标准有何不同

    通过搜索该标准的 PDF 版本 我最终找到了这个链接C 标准措辞草案 http www open std org jtc1 sc22 wg21 docs papers 2012 n3376 pdf从 2011 年开始 我意识到我可以购买最终
  • 如何识别 WPF 文本框中的 ValidationError 工具提示位置

    我添加了一个箭头来指示工具提示中的文本框 当文本框远离屏幕边缘时 这非常有效 但是当它靠近屏幕边缘时 工具提示位置发生变化 箭头显示在左侧 Here is the Image Correct as expected since TextBo
  • 将数据打印到文件

    我已经超载了 lt lt 运算符 使其写入文件并写入控制台 我已经为同一个函数创建了 8 个线程 并且我想输出 hello hi 如果我在无限循环中运行这个线程例程 文件中的o p是 hello hi hello hi hello hi e
  • 生产代码中的 LRU 实现

    我有一些 C 代码 需要使用 LRU 技术实现缓存替换 目前我知道两种实现LRU缓存替换的方法 每次访问缓存数据时使用时间戳 最后比较替换时的时间戳 使用缓存项的堆栈 如果最近访问过它们 则将它们移动到顶部 因此最后底部将包含 LRU 候选
  • 如何挤出平面 2D 网格并赋予其深度

    我有一组共面 连接的三角形 即二维网格 现在我需要将其在 z 轴上挤出几个单位 网格由一组顶点定义 渲染器通过与三角形数组匹配来理解这些顶点 网格示例 顶点 0 0 0 10 0 0 10 10 0 0 10 0 所以这里我们有一个二维正方
  • g++ 对于看似不相关的变量“警告:迭代...调用未定义的行为”

    考虑以下代码strange cpp include
  • 将代码拆分为标头/源文件

    我从 Asio 的示例页面中获取了以下代码 class tcp connection public boost enable shared from this
  • 在类的所有方法之前运行一个方法

    在 C 3 或 4 中可以做到这一点吗 也许有一些反思 class Magic RunBeforeAll public void BaseMethod runs BaseMethod before being executed public
  • 是否可以有一个 out ParameterExpression?

    我想定义一个 Lambda 表达式out范围 有可能做到吗 下面是我尝试过的 C Net 4 0 控制台应用程序的代码片段 正如您在 procedure25 中看到的 我可以使用 lambda 表达式来定义具有输出参数的委托 但是 当我想使
  • 结构体指针的动态数组

    我必须使用以下代码块来完成学校作业 严格不进行任何修改 typedef struct char firstName char lastName int id float mark pStudentRecord pStudentRecord
  • 转到定义:“无法导航到插入符号下的符号。”

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 我今天突然开始在我的项目中遇到一个问题 单击 转到定义 会出现一个奇怪的错误 无法导航到
  • WinRT 定时注销

    我正在开发一个 WinRT 应用程序 要求之一是应用程序应具有 定时注销 功能 这意味着在任何屏幕上 如果应用程序空闲了 10 分钟 应用程序应该注销并导航回主屏幕 显然 执行此操作的强力方法是在每个页面的每个网格上连接指针按下事件 并在触
  • 使用 CSharpCodeProvider 类编译 C# 7.3 的 C# 编译器版本是什么?

    我想使用 Microsoft CSharp CSharpCodeProvider 类来编译 C 7 3 代码 编译器版本在 IDictionary 中指定 在创建新的 CSharpCodeProvider 时将其作为输入 例如 Compil
  • 是否可以在 C# 中强制接口实现为虚拟?

    我今天遇到了一个问题 试图重写尚未声明为虚拟的接口方法的实现 在这种情况下 我无法更改接口或基本实现 而必须尝试其他方法 但我想知道是否有一种方法可以强制类使用虚拟方法实现接口 Example interface IBuilder

随机推荐

  • hapi fhir 弹性搜索如何配置

    我正在使用 hapi fhir v5 1 0 和 jpa 服务器 hapi fhir jpa server starter 根据描述 该版本包含用于文本搜索的弹性搜索库 我如何在这里配置弹性服务器 我看到一些条目properties文件并配
  • 让形状始终位于首页

    我正在为 Word 开发 VSTO 应用程序加载项 希望使形状始终位于首页的固定位置 有没有办法在不主动监视形状状态的情况下做到这一点 也欢迎回答 这是不可能完成的 并解释清楚原因 如果您将形状放入页眉并选中 DifferentFirstP
  • Joomla 的 ASP.NET 版本 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Task.Run(Action, CancellationToken) 何时抛出 TaskCanceledException?

    根据文档 http msdn microsoft com en us library hh160373 v vs 110 aspx Task Run Action CancellationToken throws TaskCanceledE
  • 更新 iOS 徽章而不推送通知

    我见过一些待办事项应用程序在午夜更新其应用程序徽章 始终显示正确的到期任务数量 他们这样做without使用推送通知 所以我的问题是 他们是如何做到这一点的 他们是否使用本地通知 如果是 当设备关闭时这些通知会被调用吗 我有点困惑 希望得到
  • Django:按元组的第一个值排序

    我有一个 7 元组 POSSIBILITIES 1 Something 2 Something else 现在我有一个IntegerField with choices在具有上面列出的可能性的模型中 class Something mode
  • 在 Spark Java 中将文本文件转换为序列格式

    在 Spark Java 中 如何将文本文件转换为序列文件 以下是我的代码 SparkConf sparkConf new SparkConf setAppName txt2seq sparkConf setMaster local set
  • size_t 和 off_t 的用法有什么区别?

    除了每种类型可以容纳的值的大小之外 还有哪些主要区别usage之间size t and off t 这只是一个惯例吗size t类型用于绝对大小和off t类型用于偏移 还是比这更深入 我正在编写一个包装类来启用使用写入大文件mmap我想知
  • Laravel Auth 用于登录和注册的外部数据

    我正在使用 Laravel 5 2 Auth 系统来执行以下命令 php artisan make auth 虽然这完全可以正常工作 但我的目标是使用外部 API 来执行登录 注册和更改密码 同时仍然能够使用 Auth 类的核心功能 以登录
  • 如何在 Vim 中查找变量的所有出现位置?

    在vim中 如何查找某个目录下的文件中所有出现的变量 我知道 vimgrep 有时可以工作 但它只查找文本 如果其他类具有同名变量并且我只想要特定类下的变量 则它不起作用 我应该怎么办 或者我应该换一个 IDE 当您已经拥有一个 IDE 时
  • SchemaFactory 不支持平台级别 8 中的 W3C XML Schema?

    使用 Android SDK 纯空 Activity 中的以下代码会失败 Override protected void onStart super onStart SchemaFactory schemaFactory SchemaFac
  • 读取文本文件直至某个字符

    这是我的困境 我有一个文件 希望读入所有字符 直到程序遇到 为止 并忽略 之后该行上的所有内容 例如 0 4001232 0 评论 丢弃 这很令人沮丧 因为感觉有一个非常简单的解决方案 谢谢 FILE f fopen file txt r
  • 导入适用于 Python 2.7 但不适用于 Python 3.4 的模块

    我之前一直在 Python 2 7 中使用 PyCharm 并且能够导入模块sklearn 它是通过安装的sudo apt get install python sklearn 不过 我现在已更改 PyCharm 中的设置以使用 Pytho
  • 为什么这个 SQL 脚本会这样工作?

    我正在从 SQL Server 2005 的表中提取电子邮件地址记录 并希望构建一个字符串用作 recipients列出与sp send dbmail 该表有一个名为 EmailAddress 的字段 表中有 10 条记录 我正在这样做 D
  • Android Studio 无法识别源文件夹

    我使用标准 Android Studio 目录结构 并创建了不同的构建类型 buildTypes debug runProguard false packageNameSuffix debug signingConfig signingCo
  • 为什么我不能通过 DLL/C-Connect 将 UninterpretedBytes 传递给 void*?

    我想将 UnterpretedBytes 传递给外部库 这样说 MyLibrary gt gt foo buf len len
  • 如何在 R 中的主热图旁边添加额外的单列热图

    我有以下脚本 library gplots mydata lt mtcars mydata nr lt nrow mydata mydata newval lt data frame row names rownames mydata ne
  • 使用 CSVhelper C# 合并具有不同标头的 CSV 文件

    尝试使用 CSVhelper 将目录中的多个 csv 文件合并为一个 csv 文件时 目录中有 50 个 csv 文件 在这 50 个文件中有两组文件结构 一组有 7 列 一组有 6 列 每个文件都有完全相同的前 5 个标题 但是根据文件的
  • laravel 资源控制器/路线和模型

    所以如果你做类似的事情 artisan make model TurboClown artisan make controller TurboClownController r model TurboClown 所以此时可以添加如下内容 R
  • 如何将两个分数相加?

    在 C 中如何添加两个分数 如下所示 11 6 3 4 31 12 然后你会如何简化答案 周五晚上 无聊袭来 导致 Fraction 类的运算符超载 无法保证设计的严谨性 它的工作原理是这样的 Fraction left 1 2 Fract