使用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 ...