手写分数类

struct Frac {
	ll u, v;
	Frac() : u(0), v(1) {}
	Frac(ll x) : u(x), v(1) {}

	Frac(ll _u, ll _v) {
		if (!_v) throw;
		ll g = gcd(abs(_u),abs(_v));
		_u /= g, _v /= g;
		if (_v<0) _u = -_u;
		u = _u, v = _v;
	}

	Frac &operator = (int x) {
		u = x, v = 1;
		return *this;
	}

	Frac &operator = (ll x) {
		u = x, v = 1;
		return *this;
	}

	bool operator < (const Frac & b) const {return u*b.v<v*b.u;}

	bool operator > (const Frac & b) const {return b<*this;}
	bool operator <= (const Frac & b) const {return !(b<*this);}
	bool operator >= (const Frac & b) const {return !(*this<b);}
	bool operator == (const Frac & b) const {return !(*this<b)&&!(b<*this);}
	bool operator != (const Frac & b) const {return *this<b||b<*this;}

	Frac operator + (const Frac & b) {
		ll g = gcd(v,b.v);
		return Frac(b.v/g*u+v/g*b.u,v/g*b.v);
	}
	Frac &operator += (const Frac & b) {
		return *this=*this+b;
	}
	Frac operator - (const Frac & b) {
		ll g = gcd(v,b.v);
		return Frac(b.v/g*u-v/g*b.u,v/g*b.v);
	}
	Frac &operator -= (const Frac & b) {
		return *this=*this-b;
	}
	Frac operator * (const Frac & b) {
		return Frac(u*b.u,v*b.v);
	}
	Frac &operator *= (const Frac & b) {
		return *this=*this*b;
	}
	Frac operator / (const Frac & b) {
		return *this*Frac(b.v,b.u);
	}
	Frac &operator /= (const Frac & b) {
		return *this=*this/b;
	}
	friend Frac operator - (Frac b) {
		b.u = -b.u;
		return b;
	}
	friend Frac operator + (Frac b) {
		return b;
	}
	friend ostream& operator << (ostream &stream,const Frac& b) {
		if (b.v==1) stream<<b.u;
		else stream<<b.u<<‘/‘<<b.v;
		return stream;
	}
	void read(const string &s) {
		int sign = 1, pos = 0;
		while (pos<s.size()&&(s[pos]==‘-‘||s[pos]==‘+‘)) {
			if (s[pos]==‘-‘) sign = -sign;
			++pos;
		}
		u = 0;
		while (pos<s.size()&&‘0‘<=s[pos]&&s[pos]<=‘9‘) {
			u = u*10+s[pos]-‘0‘;
			++pos;
		}
		u *= sign, v = 1;
		if (pos==s.size()) return;
		++pos, v = 0;
		while (pos<s.size()&&‘0‘<=s[pos]&&s[pos]<=‘9‘) {
			v = v*10+s[pos]-‘0‘;
			++pos;
		}
		*this = Frac(u,v);
	}
	friend istream &operator >> (istream &stream,Frac &b) {
		string s; stream >> s;
		b.read(s);
		return stream;
	}
};

  

原文地址:https://www.cnblogs.com/uid001/p/11544492.html

时间: 2024-10-14 15:34:26

手写分数类的相关文章

MyBatis原理总结(手写实现类)

我们在实际开发中,越简单越好,所以都是采用不写Dao实现类的方式.不管是使用xml还是直接配置. 但是MyBatis是支持写Dao实现类的 注意sqlSession是这里面的一个灵魂,有很多执行api 目录结构: 方法: /** * 用户的持久层接口 */ public interface IUserDao { List<User> findAll(); } 实现类: public class UserDaoImpl implements IUserDao { private SqlSessi

自己手写的自动完成js类

在web开发中,为了提高用户体验,会经常用到输入框的自动完成功能,不仅帮助用户进行快速输入,最重要的是帮助那些“记不全要输入什么”的用户进行选择.这个功能有很多插件已经实现了,为了适应项目的特殊需求,决定自己编写一个具备通用性.扩展性和灵活性的自动完成类,就当是边写边学习了,一举两得.该功能是比较简单的,核心是数据获取方式和导航的实现,简单写了一个,经测试非常好用,还有很多地方需要修改和改进,例如:在原型中只暴露init方法即可,其他方法都需要放到私有空间内,不让用户访问到,这个以后再完善吧.啥

关于java写一个单例类(面试手写题)

package com.shundong.javacore; /** * java写一个简单的单例类 * @author shundong * */ class Singleton { //使用一个类变量来缓存曾经创建的实例 private static Singleton instance; //对构造进行隐藏(private) private Singleton(){} /** * 提供一个静态方法 * 该方法加入了自定义控制 保证只产生一个Singleton对象 * @return 返回S

手写哈希类

1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<math.h> 4 #define Mod 100007 //取模的大小,哈希表的大小... 5 #define Max 50 //存放的总数 6 typedef long long LL; 7 class Hash //手写哈希 8 { 9 public: 10 int hs[Mod]; //哈希值 设定的哈希函数为 原值 % Mod ,所以哈希值有可能是 0 ~

识别手写数字增强版 - pytorch从入门到入道(一)

1.快速开始 1.1 定义神经网络类,继承torch.nn.Module,文件名为digit_recog.py 1 import torch.nn as nn 2 3 4 class Net(nn.Module): 5 def __init__(self): 6 super(Net, self).__init__() 7 self.conv1 = nn.Sequential(nn.Conv2d(1, 6, 5, 1, 2) 8 , nn.ReLU() 9 , nn.MaxPool2d(2, 2)

wex5 实战 手写签名与上传

之前做过一个物流演示模块,有一个功能没做完,就是收件人收货后,可以手写签名并上传,替代传统纸张的签名.今天终于做完了. 一 效果演示: 后台图片上传成功 二 设计思路: 运用canvas插件jq-signature,制作手写签名,并通过二进制流方式上传图片 三 代码实现: 1 .下载引入插件jq-signature 手写签名插件,网上有很多,经过多种插件的逐步尝试,只有插件jq-signature达到了我想要的效果; 原因有二:1,支持手机触摸,web,鼠标.其它有的不支持手机触摸. 2,直接转

iOS开发UI基础—手写控件,frame,center和bounds属性

一.手写控件 1.手写控件的步骤 (1)使用相应的控件类创建控件对象 (2)设置该控件的各种属性 (3)添加控件到视图中 (4)如果是button等控件,还需考虑控件的单击事件等 (5)注意:View Contollor和view的关系 2.注意点 在OC开发中,Storyboard中的所有操作都可以通过代码实现,程序员一定要熟练掌握代码布局界面的能力! 设置控件监听方法的示例代码如下: [btn addTarget:self action:@selector(click:) forContro

KNN分类算法实现手写数字识别

需求: 利用一个手写数字"先验数据"集,使用knn算法来实现对手写数字的自动识别: 先验数据(训练数据)集: ?数据维度比较大,样本数比较多. ? 数据集包括数字0-9的手写体. ?每个数字大约有200个样本. ?每个样本保持在一个txt文件中. ?手写体图像本身的大小是32x32的二值图,转换到txt文件保存后,内容也是32x32个数字,0或者1,如下: 数据集压缩包解压后有两个目录:(将这两个目录文件夹拷贝的项目路径下E:/KNNCase/digits/) ?目录trainingD

使用Caffe进行手写数字识别执行流程解析

之前在 http://blog.csdn.net/fengbingchun/article/details/50987185 中仿照Caffe中的examples实现对手写数字进行识别,这里详细介绍下其执行流程并精简了实现代码,使用Caffe对MNIST数据集进行train的文章可以参考  http://blog.csdn.net/fengbingchun/article/details/68065338 : 1.   先注册所有层,执行layer_factory.hpp中类LayerRegis