NC351. 分数到小数
描述
示例1
输入:
1,3
输出:
"0.(3)"
示例2
输入:
5,4
输出:
"1.25"
C++ 解法, 执行用时: 10ms, 内存消耗: 1932KB, 提交时间: 2022-05-23
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param n int整型 * @param m int整型 * @return string字符串 */ string frac2Dec(int n, int m) { // write code her unordered_map<long long, int> mp; string result; if((m<0&&n>0)||(m>0&&n<0)){ result+="-"; } if(m<0) m=-m; if(n<0) n=-n; int t1=n/m; result+=to_string(t1); long long t2=n%m; if(t2==0) return result; result+="."; vector<int> res; while(t2&&mp.find(t2)==mp.end()){ mp[t2]=res.size(); t2=t2*10; res.push_back(t2/m); t2=t2%m; } if(t2!=0){ int t=mp[t2]; for(int i=0;i<t;i++) result+=to_string(res[i]); result+="("; for(int i=t;i<res.size();i++) result+=to_string(res[i]); result+=")"; }else{ for(int i=0;i<res.size();i++) result+=to_string(res[i]); } return result; } };
C++ 解法, 执行用时: 12ms, 内存消耗: 1792KB, 提交时间: 2022-05-21
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param n int整型 * @param m int整型 * @return string字符串 */ string frac2Dec(int n, int m) { using LL = long long; unordered_map<LL, int> mp; int g = __gcd(n, m); n /= g; m /= g; string minor = ""; if ((n < 0) ^ (m < 0)) { minor = "-"; n = abs(n); m = abs(m); } LL a = n / m, b = n % m; if (!b) { return minor + to_string(a); } string bb = ""; while (true) { if (mp.count(b)) { bb.insert(bb.begin() + mp[b], '('); bb += ')'; return minor + to_string(a) + "." + bb; } mp[b] = bb.size(); b *= 10; bb += to_string(b / m); b %= m; if (b == 0) { return minor + to_string(a) + '.' + bb; } } return ""; } };
C++ 解法, 执行用时: 12ms, 内存消耗: 1812KB, 提交时间: 2022-03-16
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param n int整型 * @param m int整型 * @return string字符串 */ string frac2Dec(int n, int m) { // write code here long long nLong = n,mLong = m; if(nLong%mLong==0) return to_string(nLong / mLong); string res; if(nLong<0^mLong<0) res.push_back('-'); nLong = abs(nLong); mLong = abs(mLong); //整数部分 res+=to_string(nLong / mLong); res+='.'; //小数部分 long long remain = nLong % mLong;//余数 string temp; unordered_map<long long,int> t; int index = 0;//小数的第i位 while(remain!=0&&!t.count(remain)) { t[remain] = index; remain*=10; temp+=to_string(remain / mLong); remain %= mLong; ++index; } //无限循环小数 if(remain!=0) { int FirstIndex = t[remain]; temp = temp.substr(0,FirstIndex) + '(' + temp.substr(FirstIndex) + ')'; } res+=temp; return res; } };
C++ 解法, 执行用时: 12ms, 内存消耗: 1836KB, 提交时间: 2022-08-06
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param n int整型 * @param m int整型 * @return string字符串 */ string frac2Dec(int n, int m) { // write code here unordered_map<long long,int> mp; string result; if((m<0&&n>0)||(m>0&&n<0)) { result+="-"; } if(m<0) m=-m; if(n<0) n=-n; int t1=n/m; result+=to_string(t1); long long t2=n%m; if(t2==0) return result; result+="."; vector<int> res; while(t2&&mp.find(t2)==mp.end()) { mp[t2]=res.size(); t2=t2*10; res.push_back(t2/m); t2=t2%m; } if(t2!=0) { int t=mp[t2]; for(int i=0;i<t;i++) result+=to_string(res[i]); result+="("; for(int i=t;i<res.size();i++) result+=to_string(res[i]); result+=")"; }else{ for(int i=0;i<res.size();i++) result+=to_string(res[i]); } return result; } };
C++ 解法, 执行用时: 12ms, 内存消耗: 1844KB, 提交时间: 2022-07-02
class Solution { public: string frac2Dec(int n, int m) { unordered_map<long long, int> mp; string z; if ((m < 0 && n > 0) || (m > 0 && n < 0)) { z += "-"; } if (m < 0) m = -m; if (n < 0) n = -n; int x = n / m; z += to_string(x); long long y = n % m; if (y == 0) return z; z += "."; vector<int> v; while (y && mp.find(y) == mp.end()) { mp[y] = v.size(); y = y * 10; v.push_back(y / m); y = y % m; } if (y != 0) { int t = mp[y]; for (int i = 0; i < t; i++) z += to_string(v[i]); z += "("; for (int i = t; i < v.size(); i++) z += to_string(v[i]); z += ")"; } else { for (int i = 0; i < v.size(); i++) z += to_string(v[i]); } return z; } };