手动排除特殊情况;

对于一般情况,使用位运算和加减法来计算除法,使用sign记录结果符号;(这部分为leetcode 29题的答案)

使用hashmap来记录循环体出现的开始位置(如果有的话),使用flag记录有无循环体出现;

class Solution {
public:
string fractionToDecimal(int numerator, int denominator) {
if((numerator==INT_MIN||numerator==INT_MAX)&&(denominator==||denominator==-)){
if(numerator==INT_MIN){
return denominator==?"-2147483648":"";
}
if(numerator==INT_MAX){
return denominator==-?"-2147483647":"";
}
}
if(denominator==) return "";
string res;
int sign=numerator^denominator;
if(numerator==) sign=;
long num=labs(numerator),den=labs(denominator),ans=,r=;
for(int i=;i>=;i--){
if((num>>i)>=den){
ans+=<<i;
num-=den<<i;
}
}
r=num; if(ans==) res+="";
while(ans!=){
res+=ans%+'';
ans=ans/;
}
if(sign<) res+="-";
reverse(res.begin(),res.end());
if(r!=)
res+=".";
int rst=,flag=;
unordered_map<int,int>m;
string right;
int i=;
//此处分数不会是无线不循环小数,因此只需要判断是否除尽和是否循环两个break条件就可以了;
while(r!=){
r*=;
if(m.count(r)) {flag=;break;}
m[r]=i;
if(r>den){
rst=r/den;
r=r-rst*den;
right.push_back(''+rst);
}else{
right+="";
}
i++;
}
if(flag==){
res=res+right.substr(,m[r])+"("+right.substr(m[r])+")";
}else{
res+=right;
}
return res;
}
};

leetcode 166分数到小数的更多相关文章

  1. Java实现 LeetCode 166 分数到小数

    166. 分数到小数 给定两个整数,分别表示分数的分子 numerator 和分母 denominator,以字符串形式返回小数. 如果小数部分为循环小数,则将循环的部分括在括号内. 示例 1: 输入 ...

  2. Leetcode 166.分数到小数

    分数到小数 给定两个整数,分别表示分数的分子 numerator 和分母 denominator,以字符串形式返回小数. 如果小数部分为循环小数,则将循环的部分括在括号内. 示例 1: 输入: num ...

  3. Leetcode 166. Fraction to Recurring Decimal 弗洛伊德判环

    分数转小数,要求输出循环小数 如2 3 输出0.(6) 弗洛伊德判环的原理是在一个圈里,如果一个人的速度是另一个人的两倍,那个人就能追上另一个人.代码中one就是速度1的人,而two就是速度为2的人. ...

  4. 洛谷P1530 分数化小数 Fractions to Decimals

    P1530 分数化小数 Fractions to Decimals 103通过 348提交 题目提供者该用户不存在 标签USACO 难度普及/提高- 提交  讨论  题解 最新讨论 暂时没有讨论 题目 ...

  5. [C++]2-5 分数化小数

    /* 分数化小数 输入正整数a,b,c,输出a/b的小数形式.精确到小数点后C位.a,b<=10^6,c<=10^6. 输入包含多组数据,结束标记为a=b=c=0 样例输入: 1 6 4 ...

  6. 分数化小数(decimal)

    分数化小数 ①我的程序 #include<iostream>using namespace std;int main(void){ int a,b,c,kase=0; while(scan ...

  7. YTU 1439: 2.4.5 Fractions to Decimals 分数化小数

    1439: 2.4.5 Fractions to Decimals 分数化小数 时间限制: 1 Sec  内存限制: 64 MB 提交: 194  解决: 13 题目描述 写一个程序,输入一个形如N/ ...

  8. Luogu P1530 分数化小数 Fractions to Decimals(模拟)

    P1530 分数化小数 Fractions to Decimals 题意 题目描述 写一个程序,输入一个形如\(N/D\)的分数(\(N\)是分子,\(D\)是分母),输出它的小数形式.如果小数有循环 ...

  9. 166 Fraction to Recurring Decimal 分数到小数

    给定两个整数,分别表示分数的分子和分母,返回字符串格式的小数.如果小数部分为循环小数,则将重复部分括在括号内.例如,    给出 分子 = 1, 分母 = 2,返回 "0.5".  ...

随机推荐

  1. Python的__hash__函数和__eq__函数

    Python的__hash__函数和__eq__函数 可哈希的集合(hashed collections),需要集合的元素实现了__eq__和__hash__,而这两个方法可以作一个形象的比喻: 哈希 ...

  2. zabbix 性能优化

    Zabbix 安装好就放在那不管了,以为不需要调优.直到最近出现了如下一堆告警. 描述下我们的环境 硬件:8核 32G 软件:Centos7.6 Zabbix4.0.Httpd2.4.PHP7.3.M ...

  3. Vue多页面 按钮级别权限控制 directive指令控制

    利用driective 构建自己的指令,实现按钮级别权限 项目结构如下: 修改router.js { path: 'schools', name: '列表', component: () => ...

  4. 并查集+时光倒流 || [JSOI2008]星球大战starwar || BZOJ 1015 || Luogu P1197

    题面:P1197 [JSOI2008]星球大战 题解: 坑点有点多啊,加上我本来就有点头昏脑涨,一道水题写了一万年.. 并查集不支持拆开(但是可以撤销合并),只支持合并.所以把询问离线了,从最后状态到 ...

  5. file命令和readlink命令

    6. 如何软链接设备文件 设备文件比较特殊,如果要创建设备文件的链接,需要用到mknod命令: 1 2 3 4 5 [root@centos7 etc]# ll /dev/sda brw-rw---- ...

  6. 【hiho1715】树的联通问题

    题目大意:给定一棵 1~n 标号的树.Tree[L,R]表示最少需要选择的边的数量使得 L~R 号点两两连通.求: \[ \sum_{L=1}^{n} \sum_{R=L}^{n} \operator ...

  7. 关于mysql,sqlserverl,与oracle数据库连接总结

    首先准备工具类,其中需要修改的地方分别做标注 代码一sqlserver为例,不同数据库只需修改我所标记的第一处和第二处 mysql     第一处应为:com.mysql.jdbc.Driver   ...

  8. 关于jq中input的value值clone的问题

    如果想将input进行克隆,然后在后面显示出来并修改input里面的文字,这时就会发现一个问题,就是你克隆出来的value值始终是你克隆时的value,检查页面元素你就会发现,这时需要对克隆之后的in ...

  9. Java 建造者模式 简单的理解

    建造者模式 这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式,使用多个简单的对象一步一步构建成一个复杂的对象. 意图:将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表 ...

  10. 深浅拷贝(copy)

    目录 copy 模块 1.拷贝(赋值) 1). x为不可变数据类型 2). x为可变数据类型 3). 可变数据类型(比如列表)内,既有不可变元素,又有容器类型可变元素(比如列表) 2.浅拷贝 3.深拷 ...