b******i 发帖数: 914 | 1 Divide number and return result in form of a string. e.g 100/3 result should
be 33.(3) Here 3 is in brackets because it gets repeated continuously and 5
/10 should be 0.5.
这题MIT300题里面也有,好像还满经典的,不知道怎么做,求解。 |
b******i 发帖数: 914 | 2 我的想法大概是,每一个iteration保留被除数,商和余数。小数点以后把被除数放在
一个hashtable里
面,如果被除数出现过,就把上一次被除数到这一次被除数之间的商重复。
should
5
【在 b******i 的大作中提到】 : Divide number and return result in form of a string. e.g 100/3 result should : be 33.(3) Here 3 is in brackets because it gets repeated continuously and 5 : /10 should be 0.5. : 这题MIT300题里面也有,好像还满经典的,不知道怎么做,求解。
|
b******i 发帖数: 914 | 3 自己贴个code,test过几个好像是对的:
string number_division(int a, int b) {
int q, r;
string result;
// interger part
q = a / b;
r = a - b * q;
result.append(to_string(q));
// digital part
unordered_map m;
string digits;
int idx = 0;
while(r > 0) {
a = r * 10;
q = a / b;
r = a - b * q;
if(m.find(a) == m.end()) {
m[a] = idx;
digits.push_back(q + '0');
idx++;
} else {
int oldidx = m[a];
result.push_back('.');
result.append(digits.substr(0, oldidx));
result.push_back('(');
result.append(digits.substr(oldidx, idx-oldidx));
result.push_back(')');
break;
}
}
return result;
}
【在 b******i 的大作中提到】 : 我的想法大概是,每一个iteration保留被除数,商和余数。小数点以后把被除数放在 : 一个hashtable里 : 面,如果被除数出现过,就把上一次被除数到这一次被除数之间的商重复。 : : should : 5
|
w****a 发帖数: 710 | 4 这题最近出镜率贼高啊。
你这里5/10 返回0.5。有的面经让返回0.5(0)。我贴一个返回0.5(0)的吧。当然没啥区
别,细节改一下而已。
string get_decimal(int num, int den) {
string ret = to_string(num / den);
ret.push_back('.');
num %= den;
map rems;
while(num != 0 && !rems.count(num)) {
rems[num] = (int)ret.size();
num *= 10;
ret.push_back(num / den + '0');
num %= den;
}
if (num != 0) {
ret.insert(ret.begin() + rems[num], '(');
ret += ")";
} else {
ret += "(0)";
}
return ret;
} |
w****a 发帖数: 710 | 5 1337要是看板的话,建议加到leetcode里面。
我写了几个参考测试用例:
输入:
get_decimal(1, 6)
get_decimal(1, 3)
get_decimal(1, 2)
get_decimal(1, 8)
get_decimal(2, 3)
get_decimal(1, 9)
get_decimal(1, 11)
get_decimal(1, 17)
get_decimal(1, 19)
get_decimal(4, 9)
get_decimal(7, 12)
get_decimal(1, 81)
get_decimal(22, 7)
get_decimal(10, 5)
get_decimal(0, 5)
输出依次是
0.1(6)
0.(3)
0.5(0)
0.125(0)
0.(6)
0.(1)
0.(09)
0.(0588235294117647)
0.(052631578947368421)
0.(4)
0.58(3)
0.(012345679)
3.(142857)
2.(0)
0.(0) |
b******i 发帖数: 914 | 6 你这个写的很element,赞!
【在 w****a 的大作中提到】 : 这题最近出镜率贼高啊。 : 你这里5/10 返回0.5。有的面经让返回0.5(0)。我贴一个返回0.5(0)的吧。当然没啥区 : 别,细节改一下而已。 : string get_decimal(int num, int den) { : string ret = to_string(num / den); : ret.push_back('.'); : num %= den; : map rems; : : while(num != 0 && !rems.count(num)) {
|
S********s 发帖数: 29 | 7 A java version:
import java.util.HashSet;
import java.util.Set;
public class DecimalToString {
public static void main(String[] args) {
System.out.println(get_decimal(1, 6));
System.out.println(get_decimal(1, 3));
System.out.println(get_decimal(1, 2));
System.out.println(get_decimal(1, 8));
System.out.println(get_decimal(2, 3));
System.out.println(get_decimal(1, 9));
System.out.println(get_decimal(1, 11));
System.out.println(get_decimal(1, 17));
System.out.println(get_decimal(1, 19));
System.out.println(get_decimal(4, 9));
System.out.println(get_decimal(7, 12));
System.out.println(get_decimal(1, 81));
System.out.println(get_decimal(22, 7));
System.out.println(get_decimal(10, 5));
System.out.println(get_decimal(0, 5));
}
static String get_decimal(int num, int den) {
String ret = Integer.toString(num / den);
num %= den;
if (num == 0)
return ret + ".(0)";
ret = ret + ".";
Set set = new HashSet();
String temp = "";
while (num != 0 && !set.contains(num)) {
set.add(num);
num *= 10;
temp = temp + (num / den);
num = num % den;
}
if (num != 0) {
ret = ret + "(" + temp + ")";
} else {
ret = ret + temp;
}
return ret;
}
} |
C********e 发帖数: 492 | 8 请问什么是MIT 300题?
should
5
【在 b******i 的大作中提到】 : Divide number and return result in form of a string. e.g 100/3 result should : be 33.(3) Here 3 is in brackets because it gets repeated continuously and 5 : /10 should be 0.5. : 这题MIT300题里面也有,好像还满经典的,不知道怎么做,求解。
|
m***o 发帖数: 1738 | 9 同问
【在 C********e 的大作中提到】 : 请问什么是MIT 300题? : : should : 5
|
m******3 发帖数: 346 | |
|
|
j**********3 发帖数: 3211 | |
w****a 发帖数: 710 | |
w****a 发帖数: 710 | |
w****a 发帖数: 710 | |
s***c 发帖数: 639 | 15 MIT300是什么!!??
楼下注意保持队形。。 |
b******i 发帖数: 914 | 16 额。。。都盖楼了
就是MIT板上以前的面经(2012之前的)
https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=3&cad=rja&uact
=8&ved=0CDAQFjAC&url=https%3A%2F%2Fbitbucket.org%2Flanbin%2Fmitbbs-iq%
2Fdownloads%2Fquestions-bf74e3c.pd&ei=foOPVKrpMYSyoQT-pILQDg&usg=
AFQjCNFhXur2-WMDwjVTm09uZiR0iQRxVQ&sig2=YOSJn2ZodHGo4sxIfJ7-og&bvm=bv.
82001339,d.cGU
看能打开不
【在 s***c 的大作中提到】 : MIT300是什么!!?? : 楼下注意保持队形。。
|
k*******a 发帖数: 433 | 17 打不开
uact
【在 b******i 的大作中提到】 : 额。。。都盖楼了 : 就是MIT板上以前的面经(2012之前的) : https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=3&cad=rja&uact : =8&ved=0CDAQFjAC&url=https%3A%2F%2Fbitbucket.org%2Flanbin%2Fmitbbs-iq% : 2Fdownloads%2Fquestions-bf74e3c.pd&ei=foOPVKrpMYSyoQT-pILQDg&usg= : AFQjCNFhXur2-WMDwjVTm09uZiR0iQRxVQ&sig2=YOSJn2ZodHGo4sxIfJ7-og&bvm=bv. : 82001339,d.cGU : 看能打开不
|
y*****e 发帖数: 712 | 18 这个括号开始的地方不是太对吧。。。
应该是循环部分开始,不应该是从小数点后面就开始了吧
【在 S********s 的大作中提到】 : A java version: : import java.util.HashSet; : import java.util.Set; : public class DecimalToString { : public static void main(String[] args) { : System.out.println(get_decimal(1, 6)); : System.out.println(get_decimal(1, 3)); : System.out.println(get_decimal(1, 2)); : System.out.println(get_decimal(1, 8)); : System.out.println(get_decimal(2, 3));
|
c****w 发帖数: 570 | 19 请问哪里可以找到MIT300题
should
5
【在 b******i 的大作中提到】 : Divide number and return result in form of a string. e.g 100/3 result should : be 33.(3) Here 3 is in brackets because it gets repeated continuously and 5 : /10 should be 0.5. : 这题MIT300题里面也有,好像还满经典的,不知道怎么做,求解。
|
x*******9 发帖数: 138 | 20
should
5
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
#define print(x) cout << x << endl
#define input(x) cin >> x
string make_result(const vector& vec, int idx) {
string res = "";
int len = vec.size();
for (int i = 0; i < idx; i++) {
res += to_string(vec[i]);
}
res += "(";
for (int i = idx; i < len; i++) {
res += to_string(vec[i]);
}
res += ")";
return res;
}
string to_frac(int a, int b) {
unordered_map mp;
vector vec;
int idx = 0;
while (true) {
if (mp.find(a) != mp.end()) {
return make_result(vec, mp[a]);
} else {
vec.push_back(a / b);
mp[a] = idx;
}
a = (a % b) * 10;
idx++;
}
}
int main () {
int a, b;
while (input(a >> b)) {
print(">> " << a << " " << b);
string int_part = to_string(a / b);
string fac_part = to_frac(a % b * 10, b);
print(int_part << '.' << fac_part);
}
return 0;
}
【在 b******i 的大作中提到】 : Divide number and return result in form of a string. e.g 100/3 result should : be 33.(3) Here 3 is in brackets because it gets repeated continuously and 5 : /10 should be 0.5. : 这题MIT300题里面也有,好像还满经典的,不知道怎么做,求解。
|
y*****e 发帖数: 712 | 21 天。。。这题已经加入到leetcode里了,好激动啊,说明1337一直关注着新题,与时俱
进啊。
呼吁大神继续加题,leetcode继续保持oj里龙头的位置! |
c*****e 发帖数: 3226 | 22 MIT 300 题哪里有?
should
5
【在 b******i 的大作中提到】 : Divide number and return result in form of a string. e.g 100/3 result should : be 33.(3) Here 3 is in brackets because it gets repeated continuously and 5 : /10 should be 0.5. : 这题MIT300题里面也有,好像还满经典的,不知道怎么做,求解。
|