如何将两个分数相加?

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(使用前将#替换为@)

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

  • 数字或货币的字符串格式?

    我需要为每个千给出逗号 所以我用了DataFormatString 0 它运行良好 但当值为0 它正在显示 00 我只想只显示 0 我们怎样才能做到这一点 DataFormatString 0 C0 这将格式化为小数点后 0 位的货币 Da
  • 当我在 C 中将 long int 赋值给 int 时会发生什么?

    在最近的作业中 我被告知要使用long变量来存储结果 因为它可能是一个很大的数字 我决定在我的系统 英特尔酷睿 i5 64 位 Windows 7 gnu gcc 编译器 上检查这对我来说真的很重要 并发现以下代码 printf sizeo
  • 以编程方式获取命名管道的系统名称

    我正在使用 WCF NetNamedPipeBinding 编写进程间通信 我的目标是让服务在 net pipe localhost service 上运行 所以我运行最简单的主机 host new ServiceHost contract
  • 隐式将 string 转换为 string_view

    void Foo1 string view view string str one two three Foo1 one two three Implicitly convert char to string view Foo1 str I
  • 输出 objdump -t 的输出中的“.hidden”是什么意思?

    Example objdump Logger cpp o t 00000000 g F text 00000000 hidden sti 10 Logger cpp 0b2ae32b 这意味着符号的可见性被隐藏 https develope
  • 获取枚举实例的名称[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 假设我有这个枚举 public enum MyEnum ValueOne 1 ValueTwo 2 ValueThree 3 然后
  • C 语言的符号表

    我目前正在开发一种执行模式匹配的静态分析工具 我在用Flex https github com westes flex生成词法分析器 我编写了代码来管理符号表 我不太有经验C 所以我决定将符号表实现为线性链表 include
  • Java 相当于 C# 的 async/await?

    我是一名普通的 C 开发人员 但偶尔也会使用 Java 开发应用程序 我想知道 Java 中是否有相当于 C async await 的东西 简单来说 java 相当于 async Task
  • 当假设 [[assume]] 包含 UB 时会发生什么?

    在 C 23 中 assume expression 属性使得如果表达 is false 行为未定义 例如 int div int x int y assume y 1 return x y 这会编译成相同的代码 就像y一直是1 div i
  • 如果将其名称作为参数传递,如何在方法中打开表单

    我正在尝试创建一个标准方法来根据传递给它的参数打开表单 基本上 要完成此任务 using Quotes newQte new Quotes newQte ShowDialog 通过替换 Quotes with a passed parame
  • 表达式:_BLOCK_TYPE_IS_VALID(pHead->nBlockUse) 错误

    此错误发生在运行时 我不确定是什么原因导致的 代码对我来说看起来是正确的 include
  • 使用迭代器遍历 boost::ublas 矩阵

    我只是想从头到尾遍历一个矩阵 触及每个元素 然而 我发现升压矩阵没有一个迭代器 而是有两个迭代器 而且我无法弄清楚如何使它们工作以便您可以遍历整个矩阵 typedef boost numeric ublas matrix
  • 如何防止打印屏幕

    我有一个要求 我正在开发的应用程序阻止用户轻松捕获屏幕内容 我已经表示 没有可行的方法可以完全防止这种情况发生 但我正在寻找方法来为这一过程引入一些障碍 我正在使用 C NET 2 0 和 WinForms 你不能 您能做的最好的事情就是在
  • 使用 C# 从文本中删除数字

    我有一个要处理的文本文件 其中有一些数字 我只想要其中的文字 而不是其他任何东西 我成功删除了标点符号 但是如何删除数字呢 我想要使 用 C 代码 另外 我想删除长度大于 10 的单词 如何使用 Reg 表达式来做到这一点 您可以使用正则表
  • 将图像添加到 ASP.Net 中的单选按钮列表

    我正在尝试将图像添加到单选按钮列表控件 但它不起作用 我试过这个 RadioButtonList2 Items Add new ListItem String Format src Colors Dallas 625527 1 1 png
  • 检查一个数是否是完全平方数

    如何检查一个数是否是完全平方数 速度并不重要 目前 只是工作 See also Integer square root in python https stackoverflow com questions 15390807 依赖任何浮点计
  • 隐藏 MediaPlayer 控件(Microsoft 媒体平台播放器框架)

    我在 c xaml 应用程序中使用 MMP PF 提供我自己的控制元素来处理播放器 这就是为什么我想隐藏 禁用出现在底部的本机控件 在屏幕截图的屏幕中间 这只是使用了一个主题 有人知道该怎么做吗 我没能找到合适的房产 像这样使用 axWin
  • 我的 Visual Studio 2008 模板有什么问题?

    我正在尝试为 Visual Studio 创建自己的类模板 称为 公共类 我跟着有关如何手动创建项目模板的官方 MSDN 说明 http msdn microsoft com en us library ms247113 aspx几乎一字不
  • 复杂对象上的 GroupBy(例如 List

    Using GroupBy and Count gt 1我试图在列表中查找我的类的重复实例 该类看起来像这样 public class SampleObject public string Id public IEnumerable
  • 同时使用多个控制台

    是否有捷径可寻 我现在仅使用控制台测试我的网络应用程序 最好的办法是从一个项目中拥有多个控制台 然后按一下 立即调试 菜单项 我可以像过去一样使用多个项目 但这似乎很笨拙 理想情况下 我可以启动多个控制台实例 从同一线程运行很好 并且让它们

随机推荐

  • 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