leetcode 166 分數到小數

2021-10-24 11:10:03 字數 1289 閱讀 3656

使用map《餘數,出現次數》。  如果餘數再次出現時,就代表著有重疊部分了。在左邊(,最後加)

class solution {

public:

//小數部分如果餘數重複出現兩次就表示該小數是迴圈小數了

string fractiontodecimal(int numerator, int denominator) {

if(denominator==0) return "";//邊界條件,分母為0

if(numerator==0) return "0";//邊界條件,分子為0

string result;

//轉換為longlong防止溢位

long long num = static_cast(numerator);

long long denom = static_cast(denominator);

//處理正負號,一正一負取負號

if((num>0)^(denom>0))result.push_back('-');

//分子分母全部轉換為正數

num=llabs(num);denom=llabs(denom);

//處理整數部分

//處理小數部分

num%=denom;                         //獲得餘數

if(num==0)return result;             //餘數為0,表示整除了,直接返回結果

result.push_back('.');              //餘數不為0,新增小數點

int index=result.size()-1;          //獲得小數點的下標

unordered_maprecord;      //map用來記錄出現重複數的下標,然後將'('插入到重複數前面就好了

while(num&&record.count(num)==0){   //小數部分:餘數不為0且餘數還沒有出現重複數字

record[num]=++index;

num*=10;                        //餘數擴大10倍,然後求商,和草稿本上運算方法是一樣的

result+=to_string(num/denom);

num%=denom;

if(record.count(num)==1){           //出現迴圈餘數,我們直接在重複數字前面新增'(',字串末尾新增')'

result.insert(record[num],"(");

result.push_back(')');

return result;

Leetcode 166 分數到小數

給定兩個整數,分別表示分數的分子 numerator 和分母 denominator,以字串形式返回小數。如果小數部分為迴圈小數,則將迴圈的部分括在括號內。示例 1 輸入 numerator 1,denominator 2輸出 0.5 示例 2 輸入 numerator 2,denominator ...

leetcode166 分數到小數

給定兩個整數,分別表示分數的分子 numerator 和分母 denominator,以字串形式返回小數。如果小數部分為迴圈小數,則將迴圈的部分括在括號內。示例 1 輸入 numerator 1,denominator 2 輸出 0.5 示例 2 輸入 numerator 2,denominator...

LeetCode 166 分數到小數

給定兩個整數,分別表示分數的分子 numerator 和分母 denominator,以字串形式返回小數。如果小數部分為迴圈小數,則將迴圈的部分括在括號內。示例 1 輸入 numerator 1,denominator 2輸出 0.5 示例 2 輸入 numerator 2,denominator ...