问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

用C#设计分数计算器

发布网友 发布时间:2022-04-22 21:42

我来回答

2个回答

热心网友 时间:2023-09-08 21:39

    class Integer
    {
        private int _num;

        public virtual int Num
        {
            get { return _num;}
            set { _num = value; }
        }

        public Integer()
        {
            _num = 0;
        }

        public Integer(int val)
        {
            _num = val;
        }

        public static implicit operator Integer(int val)
        {
            return new Integer(val);
        }

        public static implicit operator int(Integer val)
        {
            return val.Num;
        }

        public static Integer operator +(Integer a, Integer b)
        {
            return new Integer(a.Num + b.Num);
        }

        public static Integer operator -(Integer a, Integer b)
        {
            return new Integer(a.Num - b.Num);
        }

        public static Integer operator *(Integer a, Integer b)
        {
            return new Integer(a.Num * b.Num);
        }

        public static Integer operator /(Integer a, Integer b)
        {
            return new Integer(a.Num / b.Num);
        }

        public override string ToString()
        {
            return Num.ToString();
        }
    }

    class Fraction : Integer
    {
        private int _down;

        private int _up;

        public int Down
        {
            get { return _down; }
            set
            {
                if (value == 0)
                {
                    throw new Exception("分母不能为零");
                }

                if (value < 0)
                {
                    _up = -_up;
                    _down = -value;
                }
                else
                {
                    _down = value;
                }

                Rection();
            }
        }

        public int Up
        {
            get { return _up; }
            set
            {
                if (value == 0)
                {
                    _down = 1;
                }

                _up = value;
                Rection();
            }
        }

        public override int Num
        {
            get { return _up / _down; }
            set { _up = _up % _down + value * _down; }
        }

        public Fraction()
        {
            _up = 0;
            _down = 1;
        }

        public Fraction(int up, int down)
        {
            if (down == 0)
            {
                throw new ArgumentException("分母不能为零", "down");
            }

            if (up == 0)
            {
                _up = 0;
                _down = 1;
            }
            else if (down < 0)
            {
                _up = -up;
                _down = -down;
            }
            else
            {
                _up = up;
                _down = down;
            }

            Rection();
        }

        public static implicit operator double(Fraction f)
        {
            return (double)f.Up / f.Down;
        }

        public static Fraction operator +(Fraction a, Fraction b)
        {
            return new Fraction(a.Up * b.Down + b.Up * a.Down,
                a.Down * b.Down).Rection();
        }

        public static Fraction operator +(Fraction a, Integer b)
        {
            return new Fraction(a.Up + a.Down * b.Num, a.Down).Rection();
        }

        public static Fraction operator +(Integer a, Fraction b)
        {
            return new Fraction(b.Up + b.Down * a.Num, b.Down).Rection();
        }

        public static Fraction operator -(Fraction a, Fraction b)
        {
            return new Fraction(a.Up * b.Down - b.Up * a.Down,
                a.Down * b.Down).Rection();
        }

        public static Fraction operator -(Fraction a, Integer b)
        {
            return new Fraction(a.Up - a.Down * b.Num, a.Down).Rection();
        }

        public static Fraction operator -(Integer a, Fraction b)
        {
            return new Fraction(a.Num * b.Down - b.Up, b.Down).Rection();
        }

        public static Fraction operator *(Fraction a, Fraction b)
        {
            return new Fraction(a.Up * b.Up, a.Down * b.Down).Rection();
        }

        public static Fraction operator *(Fraction a, Integer b)
        {
            return new Fraction(a.Up * b.Num, a.Down).Rection();
        }

        public static Fraction operator *(Integer a, Fraction b)
        {
            return new Fraction(a.Num * b.Up, b.Down).Rection();
        }

        public static Fraction operator /(Fraction a, Fraction b)
        {
            return new Fraction(a.Up * b.Down, a.Down * b.Up).Rection();
        }

        public static Fraction operator /(Fraction a, Integer b)
        {
            return new Fraction(a.Up, a.Down * b.Num).Rection();
        }

        public static Fraction operator /(Integer a, Fraction b)
        {
            return new Fraction(a.Num * b.Down, b.Up).Rection();
        }

        public override string ToString()
        {
            Rection();
            if (Down == 1)
            {
                return Up.ToString();
            }
            return string.Format("{0}/{1}", Up, Down);
        }

        private int GetCommonDivisor(int num1, int num2)
        {
            var remainder = 0;
            if (num1 % num2 == 0)
            {
                remainder = num2;
            }
            else
            {
                while (num1 % num2 > 0)
                {
                    remainder = num1 % num2;
                    num1 = num2;
                    num2 = remainder;
                }
            }

            return remainder;
        }

        private Fraction Rection()
        {
            var d = GetCommonDivisor(Math.Abs(Up), Math.Abs(Down));
            if (d > 1)
            {
                Up /= d;
                Down /= d;
            }
            return this;
        }
    }

上面定义好了这两个类了,加减乘除都有了,其他的你就自己写吧。

热心网友 时间:2023-09-08 21:39

使用Vs中自带的控件,然后在后台编写程序就可以了追问就是不知道怎么编才来求救的

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
女生多大后可以不在长身高? 如何不用软件把手机投屏到电脑上手机屏幕怎样投放到电脑上 战时拒绝、故意延误军事订货罪既遂的处罚? 战时故意延误军事订货罪处罚标准 名师1+1导读方案:汤姆·索亚历险记目录 三星sm-g7200打开微信慢,无法正常收看,网速不慢。 笔记本电脑如何调亮屏幕亮度 大伙说说洗衣机要不要带烘干好 热烘干洗衣机怎么样 ef英语哪个好 华为nova6se价格是什么?刚上市价格和现在的价格。 分数计算器在线使用 华为nova6se换个外屏多少钱? 怎么在计算器上打出分数? 华为nova6se价格? C语言编程问题:分数计算器 有没有分数计算器,怎样使用啊 华为nova6se多少钱? 手机上什么计算器即可以算分数又可以简便计算? 华为nova6se价格是什么? 在线分数计算器。 分数乘除法在计算器上怎么按? 计算器怎么计算分数 计算器上怎么表示分数? 魅蓝note5支持同时使用电信和移动双4G吗 冬奥会纪念币每套都一样吗 冬奥会纪念币能用吗? 2022年冬奥会纪念钞到银行能兑换人民币吗? 冬奥会纪念币尺寸具体是多少? 冬奥会纪念钞是限量的吗 华为nova6se换个屏多少钱? 分数计算器 华为nova6se值得入手吗? 这个计算器怎样输入分数 能算整数小数百分数分数的计算器叫什么 华为nvao6se多少钱? 学生用的科学计算器怎样显示分数? 华为Nvos6se多少钱? 怎么用计算器算分数? 学生计算器怎么按分数 华为nova 6se 8+128使用一年后值多少钱? 华为nova6SE,屏幕坏了,换一个多少钱? 华为nova6se外屏碎了换个多少钱? 华为nova6se换个屏幕多少钱? 华为nova6se换屏幕要多少钱? 请问华为nova6se实体店现在是什么价格? 如何顺利通过自学考试 我想参加自考,应该怎么做? 自考到底有什么流程,要怎么考? 自考怎么样