avatar
G等消息中 求bless# JobHunting - 待字闺中
x*d
1
上周面的,据推荐的同学说,到现在还是feedback pending状态。。。
以前悲剧过几次,G真难进啊
先附送一道真题。。
给两个整数a,b,求a/b后的
例子: 1/3 = 0.(3)
2/5 = 0.4
1/6 = 0.1(6)
avatar
t*e
2
bless

【在 x*******d 的大作中提到】
: 上周面的,据推荐的同学说,到现在还是feedback pending状态。。。
: 以前悲剧过几次,G真难进啊
: 先附送一道真题。。
: 给两个整数a,b,求a/b后的
: 例子: 1/3 = 0.(3)
: 2/5 = 0.4
: 1/6 = 0.1(6)

avatar
c*b
3
bless
据说最近形势不错

【在 x*******d 的大作中提到】
: 上周面的,据推荐的同学说,到现在还是feedback pending状态。。。
: 以前悲剧过几次,G真难进啊
: 先附送一道真题。。
: 给两个整数a,b,求a/b后的
: 例子: 1/3 = 0.(3)
: 2/5 = 0.4
: 1/6 = 0.1(6)

avatar
k*p
4
bless!
avatar
s*s
5
bless

【在 x*******d 的大作中提到】
: 上周面的,据推荐的同学说,到现在还是feedback pending状态。。。
: 以前悲剧过几次,G真难进啊
: 先附送一道真题。。
: 给两个整数a,b,求a/b后的
: 例子: 1/3 = 0.(3)
: 2/5 = 0.4
: 1/6 = 0.1(6)

avatar
b*5
6
G家的冷冻期为多长啊

【在 x*******d 的大作中提到】
: 上周面的,据推荐的同学说,到现在还是feedback pending状态。。。
: 以前悲剧过几次,G真难进啊
: 先附送一道真题。。
: 给两个整数a,b,求a/b后的
: 例子: 1/3 = 0.(3)
: 2/5 = 0.4
: 1/6 = 0.1(6)

avatar
x*d
7
So far, 我一般等一年以后再ping他们一下。。。

【在 b**********5 的大作中提到】
: G家的冷冻期为多长啊
avatar
y*c
8
这题很难写成bug free啊。
usaco的fracdec。
avatar
B*g
9
bless

【在 x*******d 的大作中提到】
: 上周面的,据推荐的同学说,到现在还是feedback pending状态。。。
: 以前悲剧过几次,G真难进啊
: 先附送一道真题。。
: 给两个整数a,b,求a/b后的
: 例子: 1/3 = 0.(3)
: 2/5 = 0.4
: 1/6 = 0.1(6)

avatar
e*t
10
recruiter跟我说2年。

【在 b**********5 的大作中提到】
: G家的冷冻期为多长啊
avatar
B*g
11
另外题没看懂,1/7得啥?

【在 x*******d 的大作中提到】
: 上周面的,据推荐的同学说,到现在还是feedback pending状态。。。
: 以前悲剧过几次,G真难进啊
: 先附送一道真题。。
: 给两个整数a,b,求a/b后的
: 例子: 1/3 = 0.(3)
: 2/5 = 0.4
: 1/6 = 0.1(6)

avatar
r*h
12
bless!!
avatar
x*d
13
1/7 = 0.(142857)
就是括号括住重复循环部分

【在 B*****g 的大作中提到】
: 另外题没看懂,1/7得啥?
avatar
u*o
14
orz... G家真是够傲娇的。。

【在 e*****t 的大作中提到】
: recruiter跟我说2年。
avatar
b*5
15
LZ不是一年么

【在 u*****o 的大作中提到】
: orz... G家真是够傲娇的。。
avatar
W*x
16
bless

【在 x*******d 的大作中提到】
: 上周面的,据推荐的同学说,到现在还是feedback pending状态。。。
: 以前悲剧过几次,G真难进啊
: 先附送一道真题。。
: 给两个整数a,b,求a/b后的
: 例子: 1/3 = 0.(3)
: 2/5 = 0.4
: 1/6 = 0.1(6)

avatar
z*g
17
bless

【在 x*******d 的大作中提到】
: 上周面的,据推荐的同学说,到现在还是feedback pending状态。。。
: 以前悲剧过几次,G真难进啊
: 先附送一道真题。。
: 给两个整数a,b,求a/b后的
: 例子: 1/3 = 0.(3)
: 2/5 = 0.4
: 1/6 = 0.1(6)

avatar
l*6
18
big bless !

【在 x*******d 的大作中提到】
: 上周面的,据推荐的同学说,到现在还是feedback pending状态。。。
: 以前悲剧过几次,G真难进啊
: 先附送一道真题。。
: 给两个整数a,b,求a/b后的
: 例子: 1/3 = 0.(3)
: 2/5 = 0.4
: 1/6 = 0.1(6)

avatar
c*g
19
BIG BLESS!!!
avatar
a*u
20
bless lz拿到offer
avatar
c*w
21
bless
avatar
L*n
22
BLESS
avatar
s*n
23
bless
avatar
j*t
24
//bless!
avatar
D*Y
26
bless
avatar
P*l
27
写了个
String divide(int a, int b) {
Integer k = a /b;
a %= b;
if (a == 0) return k.toString();
Map m = new HashMap();
StringBuilder sb = new StringBuilder();
sb.append('.');
int i = 1;
while (true) {
if (m.containsKey(a)) break;
m.put(a, i);
a *= 10;
if (a != 0 && b!= 0) sb.append(a/b);
a %= b;
}
if (a != 0) {
sb.append(')');
sb.insert(m.get(a).intValue(), '(');
}
sb.insert(0, k.toString());
return sb.toString();
}
跑了一下好象是对的
for (int i = 1; i < 15; i++)
System.out.println("10 / " + i + " = " + divide(10, i));
10 / 1 = 10
10 / 2 = 5
10 / 3 = 3.(3)
10 / 4 = 2.5
10 / 5 = 2
10 / 6 = 1.(6)
10 / 7 = 1.(428571)
10 / 8 = 1.25
10 / 9 = 1.(1)
10 / 10 = 1
10 / 11 = 0.(90)
10 / 12 = 0.(83)
10 / 13 = 0.(769230)
10 / 14 = 0.(714285)
avatar
h*d
28
bless.... bless myself 2...

【在 x*******d 的大作中提到】
: 上周面的,据推荐的同学说,到现在还是feedback pending状态。。。
: 以前悲剧过几次,G真难进啊
: 先附送一道真题。。
: 给两个整数a,b,求a/b后的
: 例子: 1/3 = 0.(3)
: 2/5 = 0.4
: 1/6 = 0.1(6)

avatar
P*l
29
好像用个set就行了,hashmap的value没用到

【在 P**l 的大作中提到】
: 写了个
: String divide(int a, int b) {
: Integer k = a /b;
: a %= b;
: if (a == 0) return k.toString();
: Map m = new HashMap();
: StringBuilder sb = new StringBuilder();
: sb.append('.');
: int i = 1;
: while (true) {

avatar
e*8
30
bless lz
其实也没必要用set吧。用个长度为9的array就可以了(因为distinct的非零digit最多
9个,超过9位肯定有重复的digit了)

【在 P**l 的大作中提到】
: 好像用个set就行了,hashmap的value没用到
avatar
P*l
31
不对吧。
随手跑了个数:
10 / 47 = 0.(2127659574468085106382978723404255319148936170)

【在 e*******8 的大作中提到】
: bless lz
: 其实也没必要用set吧。用个长度为9的array就可以了(因为distinct的非零digit最多
: 9个,超过9位肯定有重复的digit了)

avatar
e*8
32
哦,我明白了。如果b是single digit的话,才可以单用长度为9的array
刚才又想了一下:需要的array的大小是b的大小。因为remainder总是小于等于b的

【在 P**l 的大作中提到】
: 不对吧。
: 随手跑了个数:
: 10 / 47 = 0.(2127659574468085106382978723404255319148936170)

avatar
v*n
33
bless!!!
avatar
f*b
34
BLESS

【在 x*******d 的大作中提到】
: 上周面的,据推荐的同学说,到现在还是feedback pending状态。。。
: 以前悲剧过几次,G真难进啊
: 先附送一道真题。。
: 给两个整数a,b,求a/b后的
: 例子: 1/3 = 0.(3)
: 2/5 = 0.4
: 1/6 = 0.1(6)

avatar
c*2
35
我也贴个我的, 直接计算出了循环节出现的位置, 因此是O(1)空间.
我是直接用cout输出的, 没有转成string.
int gcd(int i, int j)
{
return j ? gcd(j, i%j ) : i;
}
// Print N/D, e.g. 10/5 = 2.0, 2/4 = 0.5, 1/6 = 0.1(6)
void fracdec(int N, int D){
// Get rid of common divisor
int d1 = gcd(N, D);
N /= d1;
D /= d1;
int I = N/D; // Integer part
cout << I << '.';
if( N%D == 0){
cout << 0 << endl;
return;
}
// Compute multiplicity of 2 and 5 in D
int m2 = 0, m5 = 0, D1 = D;
while( D1%2 == 0){
m2++;
D1 /= 2;
}
while( D1%5 == 0){
m5++;
D1 /= 5;
}
int m = (m2 > m5)? m2 : m5;
// After printing out integer part I, the number becomes N1/D
int N1 = N % D;
// Eliminate 2 and 5 in D by multiplying N1 by 10;
for(int i = 0; i < m; i++){
N1 *= 10;
cout << N1/D;
N1 %= D;
}
// If D has no other factors
if(N1 == 0){
cout << endl;
return;
}
// Print the repeated pattern
int r = N1;
cout << '(';
do{
r *= 10;
cout << r/D;
r %= D;
}while( r != N1 );
cout << ')' << endl;
}
avatar
P*r
36
Bless,
有个typo, 应该是 m.put(a, i++);

【在 P**l 的大作中提到】
: 写了个
: String divide(int a, int b) {
: Integer k = a /b;
: a %= b;
: if (a == 0) return k.toString();
: Map m = new HashMap();
: StringBuilder sb = new StringBuilder();
: sb.append('.');
: int i = 1;
: while (true) {

avatar
P*r
37
Bless,
有个typo, 应该是 m.put(a, i++);

【在 P**l 的大作中提到】
: 写了个
: String divide(int a, int b) {
: Integer k = a /b;
: a %= b;
: if (a == 0) return k.toString();
: Map m = new HashMap();
: StringBuilder sb = new StringBuilder();
: sb.append('.');
: int i = 1;
: while (true) {

avatar
x*d
38
very 牛B!!
没看懂!但是跑了下,是对的!!厉害

【在 c*******2 的大作中提到】
: 我也贴个我的, 直接计算出了循环节出现的位置, 因此是O(1)空间.
: 我是直接用cout输出的, 没有转成string.
: int gcd(int i, int j)
: {
: return j ? gcd(j, i%j ) : i;
: }
: // Print N/D, e.g. 10/5 = 2.0, 2/4 = 0.5, 1/6 = 0.1(6)
: void fracdec(int N, int D){
: // Get rid of common divisor
: int d1 = gcd(N, D);

avatar
x*d
39
哈。我大致明白了。
这个方法的insight就是如果除数不含有因子2,5了,并且和被除数互质,那么就要开
始循环了。

【在 c*******2 的大作中提到】
: 我也贴个我的, 直接计算出了循环节出现的位置, 因此是O(1)空间.
: 我是直接用cout输出的, 没有转成string.
: int gcd(int i, int j)
: {
: return j ? gcd(j, i%j ) : i;
: }
: // Print N/D, e.g. 10/5 = 2.0, 2/4 = 0.5, 1/6 = 0.1(6)
: void fracdec(int N, int D){
: // Get rid of common divisor
: int d1 = gcd(N, D);

avatar
l*u
40
bless

【在 x*******d 的大作中提到】
: 上周面的,据推荐的同学说,到现在还是feedback pending状态。。。
: 以前悲剧过几次,G真难进啊
: 先附送一道真题。。
: 给两个整数a,b,求a/b后的
: 例子: 1/3 = 0.(3)
: 2/5 = 0.4
: 1/6 = 0.1(6)

avatar
c*2
41
是的, 不互质无所谓, 但不能含有因子2,5

【在 x*******d 的大作中提到】
: 哈。我大致明白了。
: 这个方法的insight就是如果除数不含有因子2,5了,并且和被除数互质,那么就要开
: 始循环了。

avatar
s*u
42
原因是2x5=10。
所以,只要用10,100,1000,。。。去除这个数,
最后找到余数为1的那个就解决了啦。
----
再一想,只要用(10-a),(100-a),。。。去除b最后整除的那个就OK啦
avatar
z*0
43
Bless
avatar
r*h
44
我电面就是这题。
当时用了hashmap来存出现过的余数的位置,对方表示认可。
不过时间复杂度挺tricky的。
avatar
z*0
45
Bless
avatar
p*3
46
bless
avatar
c*2
47
用9, 99, 999 去除以 b, 可以得到循环节的长度, 但不能得到循环节开始的位置.
循环开始的位置由 b 里面含因子2,5的最高次幂决定.
换句话说, 直接用9, 99, 999 去除以 b, 有可能永远没法整除.
不能整除的情况发生在 b 含有因子2或5的时候, 因为2或5不可能整除9999...
如果b里面没有2或5, 那么一定有某个9999...可以被b整除.
最后, 如果b里面有2或5, 那么就在 999..后面加000, 0的个数跟着俩因子的最高次数
一样.

【在 s****u 的大作中提到】
: 原因是2x5=10。
: 所以,只要用10,100,1000,。。。去除这个数,
: 最后找到余数为1的那个就解决了啦。
: ----
: 再一想,只要用(10-a),(100-a),。。。去除b最后整除的那个就OK啦

avatar
e*8
48
啊,这个方法有趣~~

【在 c*******2 的大作中提到】
: 我也贴个我的, 直接计算出了循环节出现的位置, 因此是O(1)空间.
: 我是直接用cout输出的, 没有转成string.
: int gcd(int i, int j)
: {
: return j ? gcd(j, i%j ) : i;
: }
: // Print N/D, e.g. 10/5 = 2.0, 2/4 = 0.5, 1/6 = 0.1(6)
: void fracdec(int N, int D){
: // Get rid of common divisor
: int d1 = gcd(N, D);

avatar
u*o
49
你的程序写的很好,谢谢分享!
我想问问什么时候判断循环开始。其实只要是call了gcd(去掉最大公约数)后,
N和D两个肯定互质了啊,比如10/6变成了5/3
这种情况下,余数(2)肯定也和除数3互质。
那么在补完0的情况下(也就是你说的去掉2和5最大倍数)
比如1/150=0.00,补完两个0(N1乘了2次10后),这时候就应该开始循环了吧。
不管剩下的是什么。

【在 c*******2 的大作中提到】
: 是的, 不互质无所谓, 但不能含有因子2,5
avatar
s*s
50
我也在等hiring committee的决定。recruiter说on-site interview feedback是good
enough to send to hiring committee.是不是凶多吉少?
avatar
c*2
51
对于一个真分数a/b, 只要约分后的分母不含有因子2或5, 那么循环节从小数点后第一
位就开始了.
乘以10(补0)就是为了消除这些因子, 同时对原来分数的作用就只是移动了小数点, 比
较好处理.
比如说, 为了计算 7/24, 因为24含有3个2, 我们可以先计算 7000/24, 这个数的循环
是从小数点后第一位开始的, 把这个结果的小数点往左移3位就是7/24了.

【在 u*****o 的大作中提到】
: 你的程序写的很好,谢谢分享!
: 我想问问什么时候判断循环开始。其实只要是call了gcd(去掉最大公约数)后,
: N和D两个肯定互质了啊,比如10/6变成了5/3
: 这种情况下,余数(2)肯定也和除数3互质。
: 那么在补完0的情况下(也就是你说的去掉2和5最大倍数)
: 比如1/150=0.00,补完两个0(N1乘了2次10后),这时候就应该开始循环了吧。
: 不管剩下的是什么。

avatar
u*o
52
扫戴斯耐!我得到它了。。
阿里嘎多~~

【在 c*******2 的大作中提到】
: 对于一个真分数a/b, 只要约分后的分母不含有因子2或5, 那么循环节从小数点后第一
: 位就开始了.
: 乘以10(补0)就是为了消除这些因子, 同时对原来分数的作用就只是移动了小数点, 比
: 较好处理.
: 比如说, 为了计算 7/24, 因为24含有3个2, 我们可以先计算 7000/24, 这个数的循环
: 是从小数点后第一位开始的, 把这个结果的小数点往左移3位就是7/24了.

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。