手动排除特殊情况;

对于一般情况,使用位运算和加减法来计算除法,使用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. Android官方网站!

    Android官方网站,所有Android相关文档.官方工具.示例,全部都在上面!! http://www.android.com/

  2. 2019.9.25使用BP和Hydra爆破相关的服务

    使用BP和Hydra爆破相关的服务. Hydra:九头蛇,开源的功能强大的爆破工具,支持的服务有很多,使用hydra爆破c/s架构的服务.使用bp爆破web登录端口. dvwa:web应用程序漏洞演练 ...

  3. Qualcomm_Mobile_OpenCL.pdf 翻译-1

    1 前言 1.1 目的 这篇文档的主要目的是,向原始设备制造商(OEMs),独立软件供应商(ISVs),第三方开发者们,提供在基于高通骁龙400系列.600系列,和800系列的手机平台和芯片上进行开发 ...

  4. POJ 1734 无向图最小环/有向图最小环

    给定一张图,求图中一个至少包含三个点的环,环上的点不重复,并且环上的边的长度之和最小. 点数不超过100个 输出方案 无向图: /*Huyyt*/ #include<bits/stdc++.h& ...

  5. java8 lambda表达式应用

    1.用lambda表达式实现Runnable非常简单// Java 8之前: new Thread(new Runnable() { @Override public void run() { Sys ...

  6. 双向链表/list

    双向链表结构如下 双向链表结构中元素在内存中不是紧邻空间,而是每个元素中存放上一个元素和后一个元素的地址 第一个元素称为头(head)元素,前连接(前置指针域)为nil 最后一个元素称为尾(foot) ...

  7. 〇二——body内标签之交互输入标签二

    我们在上一章讲了一些要通过后台程序实现交互的标签,下面我们看一看一些不通过后台实现交互的标签. 一.a标签 a标签主要实现超链接的功能 1.跳转效果 这个效果比较简单,直接在属性里添加一个网址,然后可 ...

  8. JS转为number的四种方法

    // 1.Number() var num1 = Number(true); console.log(num1); var num2 = Number(" ") console.l ...

  9. volatile关键字解决线程间内存共享变量同步的问题,让变量可以立即同步。

  10. Kendo UI for jQuery使用教程:初始化jQuery插件

    [Kendo UI for jQuery最新试用版下载] Kendo UI目前最新提供Kendo UI for jQuery.Kendo UI for Angular.Kendo UI Support ...