栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

leetcode 每日一题 2021/10/3 166. 分数到小数

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

leetcode 每日一题 2021/10/3 166. 分数到小数

leetcode每日一题之分数到小数

##难度:中等

解题思路:

​ 除法计算过程:

​ 依次除,余数小于除数乘以10。

整数之间的除法有三种结果:

​ (1)整数
​ (2)有限小数
​ (3)无限不循环小数

需要解决的问题:

​ (1)判断得到结果的正负
​ a^b<0 说明a和b异号 解释:a、b异号则其中一个高位为1、另一个高位为0,异或运算结果必然小于0。
​ (2)判断什么时候结束运算
​ 1)余数为0: a%b==0;
​ 2)找到循环小数的循环体: a%b等于曾经出现过的余数,如果一个余数出现了第二次,除数不变,结果必然一直循环。

代码:
```cpp
	class Solution {
public:
    string fractionToDecimal(int numerator, int denominator) {
        long long a = numerator; //防止数据溢出
        long long b = denominator;
       if(a % b == 0){
           return to_string(a/b);
       }
       string s = ((numerator^denominator))<0? "-"+to_string(abs(numerator/denominator)):to_string((numerator/denominator));//判断是否异号
       s.push_back('.');
       long long divisor = abs(numerator % denominator);
       denominator = abs(denominator);
       map remainder;
       for(int i = s.length();divisor = (divisor % denominator) *10//divisor=0时代表有限小数终止循环;i++){
           if(remainder[divisor]){ //该余数曾经出现过,加上括号终止循环。
               s.insert(s.begin()+remainder[divisor], '(');
               s.push_back(')');
               break;
           }
           remainder[divisor] = i;
           s.append(to_string(divisor/denominator));
       }
        return s;
    }
};

其他:
to_string()将number转成string
-2^32/(-1)后溢出int范围
string::push_back()压入字符
string::append()压入字符串

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/292162.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号