• [LeetCode]Fraction to Recurring Decimal


    Fraction to Recurring Decimal

    Given two integers representing the numerator and denominator of a fraction, return the fraction in string format.

    If the fractional part is repeating, enclose the repeating part in parentheses.

    For example,

    • Given numerator = 1, denominator = 2, return "0.5".
    • Given numerator = 2, denominator = 1, return "2".
    • Given numerator = 2, denominator = 3, return "0.(6)".

    两个问题:

    1.如何找到循环小时部分,解决方法是Hash table,存储已经出现过的余数,当他再次出现说明开始循环了。这和Happy Number解法一样,Hash table判断是否有循环出现。

    2.INT的最大值和最小值,比如INT_MIN=-2147483648,取绝对值后就超过了INT_MAX=2147483647了,解决方法是使用long long类型。

     1 class Solution {
     2 public:
     3     string fractionToDecimal(int  numerator, int  denominator) {
     4         string result;
     5         long long num=numerator,den=denominator;
     6         if(numerator==0)
     7         {
     8             return "0";
     9         }
    10         if((numerator<0)^(denominator<0))
    11         {
    12             result+='-';
    13         }
    14         if(numerator<0)
    15         {
    16             num=-1*num;
    17         }
    18         if(denominator<0)
    19         {
    20             den=-1*den;
    21         }
    22         long long int_part=num/den;
    23         result+=to_string(int_part);
    24         if(num%den==0)
    25         {
    26             return result;
    27         }
    28         result+='.';
    29         long long left=num%den;
    30         unordered_map<long long,int> showed;
    31         while(left)
    32         {
    33             if(showed.find(left)!=showed.end())
    34             {
    35                 int position=showed[left];
    36                 string part1=result.substr(0,position);
    37                 string part2=result.substr(position,result.length());
    38                 result = part1+'('+part2+')';
    39                 return result;
    40             }
    41             showed[left]=result.length();
    42             left*=10;
    43             int dig=left/den;
    44             result+=to_string((long long)dig);
    45             left = left%den;
    46         }
    47         return result;
    48     }
    49 };
  • 相关阅读:
    Linux命令-网络命令:netstat
    Linux命令-网络命令:traceroute
    Linux命令-网络命令:lastlog
    Linux命令-网络命令:last
    mongodb3.4 安装及用户名密码设置
    MySQL表名不区分大小写的设置方法
    数据库设计中的四个范式
    dubbo本地调试直连
    com.mysql.jdbc.PacketTooBigException: Packet for query is too large (1169 > 1024)
    Linux服务器时间同步
  • 原文地址:https://www.cnblogs.com/Sean-le/p/4736795.html
Copyright © 2020-2023  润新知