首页 > 其他 > 详细

牛客:阶乘结果换算进制后得到数字的尾部有几个0

时间:2018-11-17 21:49:34      阅读:200      评论:0      收藏:0      [点我收藏+]

题目

用十进制计算30!(30的阶乘),将结果转化成3进制进行表示的话,该进制下的结果末尾会有多少个0?

https://www.nowcoder.com/questionTerminal/14f881b32735445bb2af3494ce5f0e17?orderByHotValue=0&pos=29

链接:https://www.nowcoder.com/questionTerminal/14f881b32735445bb2af3494ce5f0e17?orderByHotValue=0&pos=29
来源:牛客网

 对于3进制,3的质因数为3,将30!的每个因子分解成质因数的形式,末尾0的个数就是质因数的3的个数。我们只考虑3的倍数,3、6、12、15、21、24、30每个数贡献1个3,9、18贡献2个3,27贡献个3,因此质因数3的个数为1*7+2*2+3*1=14个

链接:https://www.nowcoder.com/questionTerminal/14f881b32735445bb2af3494ce5f0e17?orderByHotValue=0&pos=29
来源:牛客网

计算N!下三进制结果末尾有多少个0,其实就是计算三进制中的3被移位了多少次,就像二进制一样,每乘以2就向左移一位,末尾补0,因此这道题只要将N!因式分解成3^m*other,m就是答案。
技巧性的解法就是m=N/3+N/(3^2)+N/(3^3)....+N(3^k) (k<=N/3),
用代码实现即为:
sum=0;
while(N){
    sum+=N/3;
    N=N/3;
}
return sum;

 

牛客:阶乘结果换算进制后得到数字的尾部有几个0

原文:https://www.cnblogs.com/captain-dl/p/9975716.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!