166. Fraction to Recurring Decimal

2023-12-21 15:48
文章标签 decimal 166 recurring fraction

本文主要是介绍166. Fraction to Recurring Decimal,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

166. 分数到小数

给定两个整数,分别表示分数的分子 numerator 和分母 denominator,以字符串形式返回小数。

如果小数部分为循环小数,则将循环的部分括在括号内。

示例 1:

输入: numerator = 1, denominator = 2
输出: "0.5"

示例 2:

输入: numerator = 2, denominator = 1
输出: "2"

示例 3:

输入: numerator = 2, denominator = 3
输出: "0.(6)"

解法一:

//时间复杂度O(n), 空间复杂度O(1)
class Solution {
public:string fractionToDecimal(int numerator, int denominator) {if(numerator == 0) return "0";//防止0/denominator = “-0”的情况long a = abs((long)numerator);long b = abs((long)denominator);string res = (numerator ^ denominator) > 0 ? "" : "-";//符号部分;res += to_string(a / b);//整数部分a %= b;//余数if(!a) return res;res += '.';a *= 10;unordered_map<int, size_t> um;//被除数,索引while(a) {//开始处理小数部分res += to_string(a / b);//商um[a] = res.size() - 1;a %= b;//取余数a *= 10;//余数乘10作为下一步的被除数if(um.count(a)) return res.insert(um[a], "(") + ')';}return res;}
};

解法一:

两个整数相除结果一定是个有限小数或者循环小数,所以使用一个哈希表记录计算过程中出现过的被除数,如果遇到重复出现的被除数,说明这里是循环的末尾。

  1. 处理符号,将两个数都转成正数处理。
  2. 先计算整数部分,只需要一次除法。
  3. 再处理小数部分,每次计算出一位商,之后将余数乘10作为被除数继续进行循环。
  4. 终止条件是余数为0,或者遇到重复出现的被除数(此时应添加括号)。
2020/01/02 18:08

这篇关于166. Fraction to Recurring Decimal的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/520567

相关文章

C#中,decimal类型使用

在Microsoft SQL Server中numeric类型,在C#中使用的时候,需要用decimal类型与其对应,不能使用int等类型。 SQL:numeric C#:decimal

【 ClickHouse】 ClickHouse数据类型(整型、浮点型、布尔型、Decimal型、字符串、数组、时间类型)(二)

ClickHouse数据类型 整型 固定长度的整型,包括有符号整型或无符号整型。 1)整型范围: Int8 - [-128 : 127]Int16 - [-32768 : 32767]Int32 - [-2147483648 : 2147483647]Int64 - [-9223372036854775808 : 9223372036854775807] 2)无符号整型范围: UI

Golang | Leetcode Golang题解之第166题分数到小数

题目: 题解: func fractionToDecimal(numerator, denominator int) string {if numerator%denominator == 0 {return strconv.Itoa(numerator / denominator)}s := []byte{}if numerator < 0 != (denominator < 0) {s

Educational Codeforces Round 166 (Rated for Div. 2) (A~C)

A. Verify Password 思路:按照ASCLL值进行比较就行(因为字母的ASCLL本来就在数字后面),所以,只要找到前面比后面的数大就输出NO,反之YES 代码实现: #include<bits/stdc++.h>using namespace std;#define N 100005typedef long long ll;ll n, m, num, sum

decimal,float,double,bigint

浮点类型在存储同样范围的值时,通常比decimal使用更少的空间. float使用4个字节存储 . double占用8个字节,相比float有更高的精度和更大的范围.和整数类型一样,能选择的只是存储类型, MySQL使用double作为内部浮点计算的类型 因为需要额外的空间和计算开销,所以应该尽量只在对小数进行精确计算时才使用---例如存储财务数据. 但在数据量比较大的时候,可以考虑

认识 DECIMAL 类型

文章目录 1.作用2.实现原理参考文献 1.作用 为保证小数精度不丢失,数据库表使用 DECIMAL 类型,服务代码中使用,比如 Golang 第三方库 https://github.com/shopspring/decimal。接口协议可以使用 string 表示。 从 DB 存储,服务数据计算与前端接口返回,全链路保证小数精度不会丢失。 DECIMAL 类型另外一个作用就

【设计模式】JAVA Design Patterns——Curiously Recurring Template Pattern(奇异递归模板模式)

🔍目的 允许派生组件从与派生类型兼容的基本组件继承某些功能。 🔍解释 真实世界例子 对于正在策划赛事的综合格斗推广活动来说,确保在相同重量级的运动员之间组织比赛至关重要。这样可以防止体型明显不同的拳手之间的不匹配,例如重量级拳手与雏量级拳手的对决。 通俗描述 使类型中的某些方法接受特定于其子类型的参数。 维基百科 奇异递归模板模式(curiously

foreach无法给外部变量赋值(Local variable decimal defined in an enclosing scope must be final or effectively )

报错信息如下:    Local variable decimal defined in an enclosing scope must be final or effectively final 原因:在foreach中没有权限将外部变量地址改变。 解决方案:使用变量的Holder 解决前:此时会报错 BigDecimal decimal = BigDecimal.ZERO;lis

leetcode LCR 166.珠宝的最高价值

思路:dp 这里其实很简单,就是一个网格图,两个固定状态,一个向下,一个向右。 其实状态方程就已经出来了,就是dp[i][j]=max(dp[i-1][j],dp[i][j-1])+value。 注意:在最上面一行或者最左边一列的时候,其实就一种状态,在最上面一行的时候只有向右走的状态,在最左边一列时只有向下走的状态,所以需要额外处理一下。 上代码: class Solution {p

Sql Server 和MySql Convert转decimal使用比较

1.Sql Server --结果为0 select CONVERT(decimal,'0.1'); --结果为0 select CONVERT(decimal,'-0.1'); --结果为-0.10 select CONVERT(decimal(24,2),'-0.1'); 2.MySql -- 结果为0 select CONVERT(0.1,decimal);  -- 结果为0 se