由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - Google面试问题
相关主题
leetcode新题Factorial Trailing Zeroes大家都能过oj么?求大数加1题目的细节
问一道leetcode题L家和G家的几道面试题不懂
Factorial Trailing Zeroes这道题为什么用pow(5,k)而不是 f*=5;?一道不知道要考察什么的面试题
大家看看这几道google面试题怎么做?今天topcoder上一道漂亮的题目
不用乘号怎么做乘法关于K个sorted数组中第n大数的问题
leetcode上大数乘代码贡献一道M的链表题
问个Amazon面试题做个题吧。decoder.
贡献个题nvidia面试题
相关话题的讨论汇总
话题: 10话题: int话题: ans2话题: zeros话题: ans1
进入JobHunting版参与讨论
1 (共1页)
b*********n
发帖数: 1258
1
Write code for finding number of zeros in n!
OR
Find the first non-zero digit from the right in 100! (Factorial of hundred).
Can an int store hundred factorial. What size of array should be sufficient
to solve the above problem. Write a code for the same.
大家有什么idea?
g*******y
发帖数: 1930
2
1. 找trailing '0's:
while(n/=5) ans1+=n; //find trailing zeros;
2. 找右边数第一个非0数字:
for(i=2;i<=100;i++){
ans2*=i;
while(!(ans2%5)) ans2/=5;
while(!(ans2%2) && ans1){
ans2/=2; ans1--;
}
while(ans2>=10) ans2%=10; //ans2 is a single,non-zero digit
}
1b. 找所有的0:
const int N = 250;
char arr[N];
memset(arr,0,N); arr[0] = 1; //Big endian
for(int i=2;i<=100;i++){
char carry=0;
for(int j=0;j!=N;j+=2){
int temp = i*(arr[j+1]*10+arr[j])+carry;
arr[j] = temp%10;
arr[j+1] = temp%100/10;
carry =temp/100;
}
}
int
f*********r
发帖数: 68
3
呵呵, 这题没有这么简单.
google的面试怎么总是copy人家的题目, 没有一点儿原创性

【在 g*******y 的大作中提到】
: 1. 找trailing '0's:
: while(n/=5) ans1+=n; //find trailing zeros;
: 2. 找右边数第一个非0数字:
: for(i=2;i<=100;i++){
: ans2*=i;
: while(!(ans2%5)) ans2/=5;
: while(!(ans2%2) && ans1){
: ans2/=2; ans1--;
: }
: while(ans2>=10) ans2%=10; //ans2 is a single,non-zero digit

g*******y
发帖数: 1930
4
哦,经提醒才发现第一个是我没看清题,呵呵
难道只有用数组实现大数乘法了?
用sterling公示,100! 大概就是 e^(100ln100-100)的级别。size随便掏个计算器好了。然后写个大数乘法就搞定了吧。反正每次就乘以最多两位数。。。这个是很容易的。不过我就是还在想,有没更好的方法。不过貌似数中间出现的间断的'0'挺有随机性的。。。
第二题有问题吗?

【在 f*********r 的大作中提到】
: 呵呵, 这题没有这么简单.
: google的面试怎么总是copy人家的题目, 没有一点儿原创性

b*********n
发帖数: 1258
5
我在网上看的答案都和你的差不多
但是好像不对呀
比如说第一个问题 4!=24
应该没有0,所以输出是0
但是你的算法输出的是4
难道是我理解错了?

【在 g*******y 的大作中提到】
: 哦,经提醒才发现第一个是我没看清题,呵呵
: 难道只有用数组实现大数乘法了?
: 用sterling公示,100! 大概就是 e^(100ln100-100)的级别。size随便掏个计算器好了。然后写个大数乘法就搞定了吧。反正每次就乘以最多两位数。。。这个是很容易的。不过我就是还在想,有没更好的方法。不过貌似数中间出现的间断的'0'挺有随机性的。。。
: 第二题有问题吗?

b*********n
发帖数: 1258
6
你知道这道题的答案吗?

【在 f*********r 的大作中提到】
: 呵呵, 这题没有这么简单.
: google的面试怎么总是copy人家的题目, 没有一点儿原创性

f*********r
发帖数: 68
7
我认为第一题如果是Write code for finding number of zeros in n!的话, 只能用大
数乘法. 不过我估计楼主写错了, 应改是Write code for finding number of
trailing zeros in n!, 这样就简单多了.
第二个问题你的算法会溢出, 而且太耗时, 我记得好像可以用一些数论的结论. 我要想
一想先.

【在 g*******y 的大作中提到】
: 哦,经提醒才发现第一个是我没看清题,呵呵
: 难道只有用数组实现大数乘法了?
: 用sterling公示,100! 大概就是 e^(100ln100-100)的级别。size随便掏个计算器好了。然后写个大数乘法就搞定了吧。反正每次就乘以最多两位数。。。这个是很容易的。不过我就是还在想,有没更好的方法。不过貌似数中间出现的间断的'0'挺有随机性的。。。
: 第二题有问题吗?

r****o
发帖数: 1950
8
6!=720

【在 b*********n 的大作中提到】
: 我在网上看的答案都和你的差不多
: 但是好像不对呀
: 比如说第一个问题 4!=24
: 应该没有0,所以输出是0
: 但是你的算法输出的是4
: 难道是我理解错了?

r****o
发帖数: 1950
9
谁能举个n!中间有0(non-trailing zero)的例子?

【在 f*********r 的大作中提到】
: 我认为第一题如果是Write code for finding number of zeros in n!的话, 只能用大
: 数乘法. 不过我估计楼主写错了, 应改是Write code for finding number of
: trailing zeros in n!, 这样就简单多了.
: 第二个问题你的算法会溢出, 而且太耗时, 我记得好像可以用一些数论的结论. 我要想
: 一想先.

N*D
发帖数: 3641
10
http://www.pagalguy.com/forum/quantitative-questions-and-answers/20789-findi
ng-number-zeros-factorial-number.html
这TMD那是靠CS呀,这是靠数学,古狗真TMD无聊。

【在 b*********n 的大作中提到】
: 你知道这道题的答案吗?
相关主题
leetcode上大数乘代码求大数加1题目的细节
问个Amazon面试题L家和G家的几道面试题不懂
贡献个题一道不知道要考察什么的面试题
进入JobHunting版参与讨论
g*******y
发帖数: 1930
11
我改了,最后一句,改成while(ans2>=10) ans2%=10;
就不会溢出了。

【在 f*********r 的大作中提到】
: 我认为第一题如果是Write code for finding number of zeros in n!的话, 只能用大
: 数乘法. 不过我估计楼主写错了, 应改是Write code for finding number of
: trailing zeros in n!, 这样就简单多了.
: 第二个问题你的算法会溢出, 而且太耗时, 我记得好像可以用一些数论的结论. 我要想
: 一想先.

f*********r
发帖数: 68
12
factorial(1:10)
ans =
1 2 6 24 120 720
5040 40320 362880 3628800

【在 r****o 的大作中提到】
: 谁能举个n!中间有0(non-trailing zero)的例子?
f*********r
发帖数: 68
13
你这个第一个也不对吧, find trailing zeros, 应该是 while(n/=5) {ans1++;}

【在 g*******y 的大作中提到】
: 我改了,最后一句,改成while(ans2>=10) ans2%=10;
: 就不会溢出了。

g*******y
发帖数: 1930
14
不光是trailing '0'而是找所有的0的话,第一个好歹还可以考考数组实现大数乘法;

【在 N*D 的大作中提到】
: http://www.pagalguy.com/forum/quantitative-questions-and-answers/20789-findi
: ng-number-zeros-factorial-number.html
: 这TMD那是靠CS呀,这是靠数学,古狗真TMD无聊。

g*******y
发帖数: 1930
15
是对的。你想想呢

【在 f*********r 的大作中提到】
: 你这个第一个也不对吧, find trailing zeros, 应该是 while(n/=5) {ans1++;}
N*D
发帖数: 3641
16
这有啥好考的,现在都64-bit了,以前的大树现在都是小树了

【在 g*******y 的大作中提到】
: 不光是trailing '0'而是找所有的0的话,第一个好歹还可以考考数组实现大数乘法;
f*********r
发帖数: 68
17
你是对的, 我想错了.

【在 g*******y 的大作中提到】
: 是对的。你想想呢
g*******y
发帖数: 1930
18
你看看我前面回复里面用sterling公式给出的估计呢,64bit绝对不够。

【在 N*D 的大作中提到】
: 这有啥好考的,现在都64-bit了,以前的大树现在都是小树了
f*********r
发帖数: 68
19
有问题的不是1, 是2
first non-zero digit应该是2, 4, 6, 8. 你的这个结果会是回是奇数, 你可以随便计
算几个10!, 11!.. 估计就能发现bug了

【在 g*******y 的大作中提到】
: 你看看我前面回复里面用sterling公式给出的估计呢,64bit绝对不够。
N*D
发帖数: 3641
20
不用看俺也知道2^64 < 100!,这不是point,俺觉得狗狗的interviewer就是以折腾人为
乐。

【在 g*******y 的大作中提到】
: 你看看我前面回复里面用sterling公式给出的估计呢,64bit绝对不够。
相关主题
今天topcoder上一道漂亮的题目做个题吧。decoder.
关于K个sorted数组中第n大数的问题nvidia面试题
贡献一道M的链表题T家在线题2道 (转载)
进入JobHunting版参与讨论
g*******y
发帖数: 1930
21
我试了几次都是偶数,你是不是测试的是前几分钟还没有修改好的code?
贴一个完整的吧:
int main(){
int i,n,ans1=0,ans2=1;
cin>>n;
int temp=n;
while(temp/=5) ans1+=temp;
for(i=2;i<=n;i++){
ans2*=i;
while(!(ans2%5)) ans2/=5;
while(!(ans2%2) && ans1){
ans2/=2; ans1--;
}
while(ans2>=10) ans2%=10;
}
}

【在 f*********r 的大作中提到】
: 有问题的不是1, 是2
: first non-zero digit应该是2, 4, 6, 8. 你的这个结果会是回是奇数, 你可以随便计
: 算几个10!, 11!.. 估计就能发现bug了

b*********n
发帖数: 1258
22
is it for trailing zeros or all zeros?
which variable is your output result?

便计

【在 g*******y 的大作中提到】
: 我试了几次都是偶数,你是不是测试的是前几分钟还没有修改好的code?
: 贴一个完整的吧:
: int main(){
: int i,n,ans1=0,ans2=1;
: cin>>n;
: int temp=n;
: while(temp/=5) ans1+=temp;
: for(i=2;i<=n;i++){
: ans2*=i;
: while(!(ans2%5)) ans2/=5;

N*D
发帖数: 3641
23
all zeros, see my link

【在 b*********n 的大作中提到】
: is it for trailing zeros or all zeros?
: which variable is your output result?
:
: 便计

g*******y
发帖数: 1930
24
ans1: trailing zeros
ans2: first non-zero digit (from right)
所有的zeros我打算试着写个练练~(code贴在2楼),答案是30个0,不知道对不对?

【在 b*********n 的大作中提到】
: is it for trailing zeros or all zeros?
: which variable is your output result?
:
: 便计

f*********r
发帖数: 68
25
这个O(N)方法是对的. 不过估计不是google想要的算法.

【在 g*******y 的大作中提到】
: 我试了几次都是偶数,你是不是测试的是前几分钟还没有修改好的code?
: 贴一个完整的吧:
: int main(){
: int i,n,ans1=0,ans2=1;
: cin>>n;
: int temp=n;
: while(temp/=5) ans1+=temp;
: for(i=2;i<=n;i++){
: ans2*=i;
: while(!(ans2%5)) ans2/=5;

h*******e
发帖数: 225
26
Read the stuff and see if works like that before you post

【在 N*D 的大作中提到】
: all zeros, see my link
b*********n
发帖数: 1258
27
yes, now i can see you are right.

便计

【在 g*******y 的大作中提到】
: 我试了几次都是偶数,你是不是测试的是前几分钟还没有修改好的code?
: 贴一个完整的吧:
: int main(){
: int i,n,ans1=0,ans2=1;
: cin>>n;
: int temp=n;
: while(temp/=5) ans1+=temp;
: for(i=2;i<=n;i++){
: ans2*=i;
: while(!(ans2%5)) ans2/=5;

f*********r
发帖数: 68
28
写了一个O(log5(N))的算法, 不过好像还有更快的!
int n;
int tbl[] = {1, 1, 2, 6, 4, 4, 4, 8, 4, 6};
int tbl2[][4] = {{}, {2, 6, 8, 4}, {4, 2, 6, 8}, {6, 8, 4, 2}, {8, 4, 2, 6}};
int fun(int n) {
if(n<5) return tbl[n];
int k = (fun(n/5)*tbl[n%10]*6)%10;
return tbl2[k/2][(n/5)%4];
}
void solve() {
int res;
res = fun(n);
cout< }
int main(){
freopen("in.txt", "r", stdin);
while(cin>>n) {
solve();
}
}
f********y
发帖数: 69
29
(1 * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10)
2 * 5 = 0, 10 = 10
(1* 3 * 4 * 6 * 7 * 8 * 9) 的结果乘上10次
即8 * 8 * 8 * 8 * 8 * 8 * 8 * 8 * 8 * 8
最后一位为4
f********y
发帖数: 69
30
(1 * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10)
2 * 5 = 0, 10 = 10
(1* 3 * 4 * 6 * 7 * 8 * 9) 的结果乘上10次
即8 * 8 * 8 * 8 * 8 * 8 * 8 * 8 * 8 * 8
最后一位为4
相关主题
这当了妈之后,怎么这么难决定取舍offer了问一道leetcode题
这题有最优解法么Factorial Trailing Zeroes这道题为什么用pow(5,k)而不是 f*=5;?
leetcode新题Factorial Trailing Zeroes大家都能过oj么?大家看看这几道google面试题怎么做?
进入JobHunting版参与讨论
t****t
发帖数: 6806
31
你这个回答未免也太不动脑了, 自己拿个计算器算算
21*22*...*30最后一位非0是多少

【在 f********y 的大作中提到】
: (1 * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10)
: 2 * 5 = 0, 10 = 10
: (1* 3 * 4 * 6 * 7 * 8 * 9) 的结果乘上10次
: 即8 * 8 * 8 * 8 * 8 * 8 * 8 * 8 * 8 * 8
: 最后一位为4

f********y
发帖数: 69
32
(1 * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10)
2 * 5 = 0, 10 = 10
(1* 3 * 4 * 6 * 7 * 8 * 9) 的结果乘上10次
即8 * 8 * 8 * 8 * 8 * 8 * 8 * 8 * 8 * 8
最后一位为4
f********y
发帖数: 69
33
(1 * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10)
2 * 5 = 0, 10 = 10
(1* 3 * 4 * 6 * 7 * 8 * 9) 的结果乘上10次
即8 * 8 * 8 * 8 * 8 * 8 * 8 * 8 * 8 * 8
最后一位为4
f********y
发帖数: 69
34
(1 * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10)
2 * 5 = 0, 10 = 10
(1* 3 * 4 * 6 * 7 * 8 * 9) 的结果乘上10次
即8 * 8 * 8 * 8 * 8 * 8 * 8 * 8 * 8 * 8
最后一位为4

人为

【在 N*D 的大作中提到】
: 不用看俺也知道2^64 < 100!,这不是point,俺觉得狗狗的interviewer就是以折腾人为
: 乐。

t****t
发帖数: 6806
35
kao, 没脑的答案还要连发5遍! 这什么世道.

【在 f********y 的大作中提到】
: (1 * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10)
: 2 * 5 = 0, 10 = 10
: (1* 3 * 4 * 6 * 7 * 8 * 9) 的结果乘上10次
: 即8 * 8 * 8 * 8 * 8 * 8 * 8 * 8 * 8 * 8
: 最后一位为4
:
: 人为

N******e
发帖数: 437
36
同学给解释一下吧。
中间的那些0是怎么造成的呢?

【在 g*******y 的大作中提到】
: 我试了几次都是偶数,你是不是测试的是前几分钟还没有修改好的code?
: 贴一个完整的吧:
: int main(){
: int i,n,ans1=0,ans2=1;
: cin>>n;
: int temp=n;
: while(temp/=5) ans1+=temp;
: for(i=2;i<=n;i++){
: ans2*=i;
: while(!(ans2%5)) ans2/=5;

M*****a
发帖数: 2054
37
simple
find 2因子,find 5因子的个数
小学竞赛题

).
sufficient

【在 b*********n 的大作中提到】
: Write code for finding number of zeros in n!
: OR
: Find the first non-zero digit from the right in 100! (Factorial of hundred).
: Can an int store hundred factorial. What size of array should be sufficient
: to solve the above problem. Write a code for the same.
: 大家有什么idea?

m********0
发帖数: 2717
38
not at all。
不是算tailing zeros,算所有零的个数。
自己看清楚题目和回帖再发贴吧。

【在 M*****a 的大作中提到】
: simple
: find 2因子,find 5因子的个数
: 小学竞赛题
:
: ).
: sufficient

m********0
发帖数: 2717
39
你自己错了。人家算的没错。本来就是4。
100!第一个非零的就是4。

【在 t****t 的大作中提到】
: kao, 没脑的答案还要连发5遍! 这什么世道.
g*******y
发帖数: 1930
40
那是碰巧碰对的,你用他的方法算算30!试试呢。

【在 m********0 的大作中提到】
: 你自己错了。人家算的没错。本来就是4。
: 100!第一个非零的就是4。

相关主题
大家看看这几道google面试题怎么做?问个Amazon面试题
不用乘号怎么做乘法贡献个题
leetcode上大数乘代码求大数加1题目的细节
进入JobHunting版参与讨论
m********0
发帖数: 2717
41
恩。sorry。我只看了结果,我检讨。。

【在 g*******y 的大作中提到】
: 那是碰巧碰对的,你用他的方法算算30!试试呢。
m********0
发帖数: 2717
42
算一共多少个零的问题,有人提供code吗?non-trivial的非大数乘法的code。
虽然很多任意范围,任意精度的库很多了。
t****t
发帖数: 6806
43
我不认为中间的零可以随意的计算出来.

【在 m********0 的大作中提到】
: 算一共多少个零的问题,有人提供code吗?non-trivial的非大数乘法的code。
: 虽然很多任意范围,任意精度的库很多了。

1 (共1页)
进入JobHunting版参与讨论
相关主题
nvidia面试题不用乘号怎么做乘法
T家在线题2道 (转载)leetcode上大数乘代码
这当了妈之后,怎么这么难决定取舍offer了问个Amazon面试题
这题有最优解法么贡献个题
leetcode新题Factorial Trailing Zeroes大家都能过oj么?求大数加1题目的细节
问一道leetcode题L家和G家的几道面试题不懂
Factorial Trailing Zeroes这道题为什么用pow(5,k)而不是 f*=5;?一道不知道要考察什么的面试题
大家看看这几道google面试题怎么做?今天topcoder上一道漂亮的题目
相关话题的讨论汇总
话题: 10话题: int话题: ans2话题: zeros话题: ans1