สมมติว่าเรามีตัวเลขสองตัวที่เรียกว่าตัวเศษและตัวส่วนแทนจำนวนตรรกยะในรูปแบบ (ตัวเศษ / ตัวส่วน) เราต้องหาการแสดงทศนิยมเป็นสตริง หากมีตัวเลขซ้ำๆ ให้ใส่วงเล็บเหลี่ยม
ดังนั้น หากอินพุตเหมือนกับตัวเศษ =164 ตัวส่วน =3 ผลลัพธ์จะเป็น "54.(6)"
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- ถ้าตัวเศษเหมือนกับ 0 แล้ว −
- คืนค่า "0"
- กำหนดอาร์เรย์และ
- ถ้าตัวเศษ <0 และตัวส่วน> 0 หรือตัวเศษ> 0 และตัวส่วน <0 แล้ว −
- ใส่ '-' ต่อท้ายคำตอบ
- ตัวหาร :=| ตัวเศษ|
- เงินปันผล :=|ตัวส่วน|
- ที่เหลือ :=ตัวหาร ตัวหาร ตัวหาร เงินปันผล
- x :=แปลง (ตัวหาร / เงินปันผล) เป็นสตริง
- สำหรับการเริ่มต้น i :=0 เมื่อ i <ขนาด x อัปเดต (เพิ่ม i ขึ้น 1) ทำ −
- ใส่ x[i] ต่อท้าย ans
- ถ้าเศษเหลือเท่ากับ 0 แล้ว −
- คืนค่า ans เป็นสตริง
- แทรก '.' ต่อท้าย ans
- กำหนดหนึ่งแผนที่ m
- ในขณะที่เศษเหลือไม่เท่ากับ 0, ทำ −
- ถ้าเศษที่เหลือไม่เป็น m แล้ว −
- แทรก (องค์ประกอบแรกของ ans เชื่อม '(') ลงใน ans
- ใส่ ')' ต่อท้ายคำตอบ
- ออกมาจากวงจร
- มิฉะนั้น −
- m[remainder] :=ขนาดของ ans
- เศษ :=เศษเหลือ * 10
- แทรก (ส่วนที่เหลือ / เงินปันผล) ต่อ '0' ต่อท้ายคำตอบ
- remainder :=เศษ mod ที่เหลือ
- ถ้าเศษที่เหลือไม่เป็น m แล้ว −
- คืนค่า ans เป็นสตริง
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
string solve(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());
}
};
string solve(int numerator, int denominator) {
return (new Solution())->solve(numerator, denominator);
}
int main() {
cout << solve(164, 3);
} อินพุต
164, 3
ผลลัพธ์
54.(6)