文章目录
题目
给定两个整数,分别表示分数的分子 numerator 和分母 denominator,以字符串形式返回小数。
如果小数部分为循环小数,则将循环的部分括在括号内。
示例 1:
输入: numerator = 1, denominator = 2
输出: “0.5”
示例 2:
输入: numerator = 2, denominator = 1
输出: “2”
示例 3:
输入: numerator = 2, denominator = 3
输出: “0.(6)”
解法一(字典/哈希表)
思路:直接使用数值相除进行求解,如果不够除就乘以10,然后结果补0,不过为了防止溢出使用了long。
- 把负数转换为正数进行求解,如果是异号,给结果字符串增加负号
- 先对整数部分求解,整数部分直接相除后把字符串结果保存起来
- 小数部分,每次使用字典记录分子出现过的索引位置,如果分子再次出现则表示是循环小数,那么再分子上一次出现的位置和字符串结尾插入括号
public class Solution {
public string FractionToDecimal(int numerator, int denominator) {
long n = numerator,m=denominator;
long nChild;
if(n == 0) return "0";
List<char> r = new List<char>();
Dictionary<long,int> nIdx = new Dictionary<long,int>();
if(n < 0 && m > 0 || n > 0 && m < 0) r.Add('-')