一亩三分地论坛

 找回密码
 获取更多干货,去instant注册!

扫码关注一亩三分地公众号
查看: 2301|回复: 9
收起左侧

[编程题] 一道Codility上的面试题

[复制链接] |试试Instant~ |关注本帖
zenw 发表于 2014-12-21 01:24:17 | 显示全部楼层 |阅读模式

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看,没有帐号?获取更多干货,去instant注册!

x

A positive integer N is given. Write a function:
           function solution(N);
that returns the sum of the values of the digits in a decimal representation of N! (fractorial of N).
For example, give N = 14, the function should return 45, because N! = 87178291200 and the sum of the values of its digits equals:
8+7+1+7+8+2+9+1+2+0+0 = 45
The function should return -1 if the result exceeds 100,000,000.
Assume that:
  • N is an integer within the range [1...2,000]


Complexity:
  • expected worst-case time complexity is O(N^2)
  • expected worst-case space complexity is O(N)

nemoczech 发表于 2014-12-22 01:10:21 | 显示全部楼层
LZ能不能share下这题的题目名称是什么?谢谢了~
回复 支持 反对

使用道具 举报

 楼主| zenw 发表于 2014-12-22 01:11:46 | 显示全部楼层
nemoczech 发表于 2014-12-22 01:10
LZ能不能share下这题的题目名称是什么?谢谢了~

不知道叫什么啊 online 做的 不是demo题 没有名字的
回复 支持 反对

使用道具 举报

readman 发表于 2014-12-22 15:35:24 | 显示全部楼层
- = 我第一个想到的是斯特灵公式, 然后感觉那么复杂不会出..然后就不知道了
回复 支持 反对

使用道具 举报

readman 发表于 2014-12-22 15:39:08 | 显示全部楼层
- = 确实想不到不算出来n!就解决此题的方法...要是让算出来能有好多办法..
回复 支持 反对

使用道具 举报

 楼主| zenw 发表于 2014-12-23 08:23:54 | 显示全部楼层
readman 发表于 2014-12-22 15:39
- = 确实想不到不算出来n!就解决此题的方法...要是让算出来能有好多办法..

算出来肯定overflow了
回复 支持 反对

使用道具 举报

nemoczech 发表于 2014-12-24 01:42:27 | 显示全部楼层
有没有想出什么好的解法?我在网上搜了一圈似乎也没有什么满意的答案...顺便问问LZ做的是哪家公司的OA啊?
回复 支持 反对

使用道具 举报

xutopia 发表于 2014-12-24 02:49:26 | 显示全部楼层
本帖最后由 xutopia 于 2014-12-24 03:00 编辑

Assuming the space complexity asked is O(N) word complexity (i.e. O(N) 32-bit integers or something), and arithmetic of words is O(1) time.

1. Precompute everything, hardcode them in a table, do a table look up. O(1) time, if 100,000,000 fits in one word this is O(N) space.

2. Use linked list to implement large number multiplication in a big enough base, say base N. As N!<N^N, which in base-N representation only needs N numbers, so space complexity is O(N) words. Computing N! is O(N^2) time (actually no, see edit note below), once you have N! in base-N, computing the digits in base-10 should be easy.

Edit: In the 2nd approach computing N! in base N should be O(N^2 log N) using FFT, not sure how to get it down to O(N^2) for now, maybe do (N / log N) based arithmetic instead.
回复 支持 反对

使用道具 举报

 楼主| zenw 发表于 2014-12-24 05:07:30 | 显示全部楼层
xutopia 发表于 2014-12-24 02:49
Assuming the space complexity asked is O(N) word complexity (i.e. O(N) 32-bit integers or something) ...

大神 你认识徐硕 长起么? 我好像知道你
回复 支持 反对

使用道具 举报

lijie 发表于 2015-3-10 08:53:18 | 显示全部楼层
题目的名字是:FactorialDigitsSum
回复 支持 反对

使用道具 举报

本版积分规则

请点这里访问我们的新网站:一亩三分地Instant.

Instant搜索更强大,不扣积分,内容组织的更好更整洁!目前仍在beta版本,努力完善中!反馈请点这里

关闭

一亩三分地推荐上一条 /5 下一条

手机版|小黑屋|一亩三分地论坛声明 ( 沪ICP备11015994号 )

custom counter

GMT+8, 2016-12-8 18:34

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

快速回复 返回顶部 返回列表