由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - Google onsite一题
相关主题
Help, Algorithms questionsDivide Two Integers OJ和CCP150的做法
1道brianbench 的题 c++问一道算法题(整数表示成乘积)
C++ 面试题最近onsite的时候刚拿到一道面试题?
也说两个面试题转划单词题的优解
问一个facebook的电面题leetcode出了新题word ladder
攒人品之facebook电面面经请教word ladder解法,大test超时
leecode上的divide two integers问题leetcode: integer to roman 结果不同
leetcode: Divide Two Integers 怎么做?T家电面面经并且不解为何被秒拒
相关话题的讨论汇总
话题: decimal话题: int话题: string话题: num话题: get
进入JobHunting版参与讨论
1 (共1页)
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
10
同问什么是MIT 300题
相关主题
攒人品之facebook电面面经Divide Two Integers OJ和CCP150的做法
leecode上的divide two integers问题问一道算法题(整数表示成乘积)
leetcode: Divide Two Integers 怎么做?最近onsite的时候刚拿到一道面试题?
进入JobHunting版参与讨论
j**********3
发帖数: 3211
11
MIT300是什么!
w****a
发帖数: 710
12
MIT300是什么!!??
w****a
发帖数: 710
13
MIT300是什么!!??
w****a
发帖数: 710
14
MIT300是什么!!??
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题里面也有,好像还满经典的,不知道怎么做,求解。

1 (共1页)
进入JobHunting版参与讨论
相关主题
T家电面面经并且不解为何被秒拒问一个facebook的电面题
Anagrams有面试碰到过么?攒人品之facebook电面面经
问一个C++ set和unordered_set iterator的问题leecode上的divide two integers问题
word ladder能只用一个queue搞定吗?leetcode: Divide Two Integers 怎么做?
Help, Algorithms questionsDivide Two Integers OJ和CCP150的做法
1道brianbench 的题 c++问一道算法题(整数表示成乘积)
C++ 面试题最近onsite的时候刚拿到一道面试题?
也说两个面试题转划单词题的优解
相关话题的讨论汇总
话题: decimal话题: int话题: string话题: num话题: get