C++ 中分數到迴圈小數的轉換
假設我們有兩個整數代表分數的分子和分母,我們需要找到分數的字串格式。如果小數部分是迴圈的,則將迴圈部分用括號括起來。例如,如果分子是 2,分母是 3,則輸出為“0.(6)”
為了解決這個問題,我們將遵循以下步驟:
如果分子為 0,則返回 0
定義一個數組 ans
如果分子 < 0 且分母 > 0 或分子 = 0 且分母 < 0,則將負號 ‘-’ 插入 ans 陣列
除數 := |分子|,被除數 := |分母|,餘數 := 除數 mod 被除數
x := 除數 / 被除數 的字串
將 x 中的每個字元插入 ans 陣列
如果餘數 = 0,則返回 ans 陣列作為字串。
在 ans 中插入點 ‘.’
定義一個對映 m
當餘數不為 0 時
如果餘數存在於 m 中,則
在 ans 的 m[餘數] 索引處插入左括號
在 ans 的末尾插入右括號
中斷迴圈
否則
m[餘數] := ans 的大小
餘數 := 餘數 * 10
將 (餘數 / 被除數) 作為字元插入 ans
餘數 := 餘數 mod 被除數
返回 ans 陣列作為字串。
讓我們看下面的實現來更好地理解:
示例
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
string fractionToDecimal(int numerator, int denominator) {
if(numerator == 0)return "0";
vector <char> ans;
if(numerator < 0 && denominator > 0 || numerator > 0 && denominator < 0)ans.push_back('-');
long divisor = labs(numerator);
long dividend = labs(denominator);
long remainder = divisor % dividend;
string x = to_string(divisor/dividend);
for(int i = 0; i < x.size(); i++){
ans.push_back(x[i]);
}
if(remainder == 0){
return string(ans.begin(), ans.end());
}
ans.push_back('.');
map <int, int> m;
while(remainder != 0){
if(m.find(remainder)!=m.end()){
ans.insert(ans.begin() + m[remainder], '(');
ans.push_back(')');
break;
}else{
m[remainder] = ans.size();
remainder *= 10;
ans.push_back((remainder / dividend) + '0');
remainder %= dividend;
}
}
return string(ans.begin(), ans.end());
}
};
main(){
Solution ob;
cout << ((ob.fractionToDecimal(100,6)));
}輸入
100 6
輸出
16.(6)
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP