LeetCode 166. Fraction to Recurring Decimal
2016-06-13 04:18
375 查看
So, the best solution I have seen.
点击打开链接
Integer part is easy to handle. For the fraction part, we need to remember where the loop start. Thus, we need to remember the position to insert '(' and the remainder.
#include <string>
#include <unordered_map>
#include <iostream>
using namespace std;
string getDec(long remainder, long den) {
string res = "";
unordered_map<long, int> map;
int i = 0;
while((remainder != 0) && (map.find(remainder) == map.end())) {
map.insert(make_pair(remainder, i));
i++;
remainder = remainder * 10;
res = res + (to_string(remainder/den));
remainder = remainder % den;
}
if(remainder != 0) {
int pos = map[remainder];
res.insert(pos, 1, '('); // insert position, bytes, char
res = res + ")";
}
return res;
}
string fractionToDecimal(int numerator, int demoinator) {
long num = numerator;
long den = demoinator;
bool neg = num * den < 0;
num = abs(num);
den = abs(den);
string res = neg ? ("-" + to_string(num / den)) : to_string(num / den);
long remainder = num % den;
return (remainder == 0) ? res : (res + "." + getDec(remainder, den));
}
int main(void) {
cout << fractionToDecimal(4, 333) << endl;
}
点击打开链接
Integer part is easy to handle. For the fraction part, we need to remember where the loop start. Thus, we need to remember the position to insert '(' and the remainder.
#include <string>
#include <unordered_map>
#include <iostream>
using namespace std;
string getDec(long remainder, long den) {
string res = "";
unordered_map<long, int> map;
int i = 0;
while((remainder != 0) && (map.find(remainder) == map.end())) {
map.insert(make_pair(remainder, i));
i++;
remainder = remainder * 10;
res = res + (to_string(remainder/den));
remainder = remainder % den;
}
if(remainder != 0) {
int pos = map[remainder];
res.insert(pos, 1, '('); // insert position, bytes, char
res = res + ")";
}
return res;
}
string fractionToDecimal(int numerator, int demoinator) {
long num = numerator;
long den = demoinator;
bool neg = num * den < 0;
num = abs(num);
den = abs(den);
string res = neg ? ("-" + to_string(num / den)) : to_string(num / den);
long remainder = num % den;
return (remainder == 0) ? res : (res + "." + getDec(remainder, den));
}
int main(void) {
cout << fractionToDecimal(4, 333) << endl;
}
相关文章推荐
- iOS之Runtime
- leetcode #88 in cpp
- Win7+VS2013+OpenCV2.4.13+CUDA7.5.18+CMAKE3.3.0 环境搭建
- android性能优化实战理论篇
- 将子域名请求路由到MVC区域
- 常用的一些HQL查询语句详解(1)
- ?House Robber III
- *leetcode #87 in cpp
- LeetCode 163. Missing Ranges
- 以Rust为例,看如何学习一门新语言?
- DX学习笔记(旋转的茶壶)DX自带几何体
- DAG的深度优先搜索标记
- org.xml.sax.SAXParseException: Failed to read schema document错误的完美解决方法 以及 Spring如何加载XSD文件
- 监控服务之nagios服务
- Remove Element
- Balanced Binary Tree
- 16_AOP入门准备_Jdk动态代理模式
- org.springframework.dao.DataIntegrityViolationException: Data truncation: Data too long for column '
- Openstack组件部署 — Keystone功能介绍与认证实现流程
- c++中std namespace和socket的bind的冲突