首页 > 试题广场 >

用十进制计算30!(30的阶乘),将结果转换成3进制进行表示

[单选题]
用十进制计算30!(30的阶乘),将结果转换成3进制进行表示的话,该进制下的结果末尾会有____个0。
  • 6
  • 8
  • 10
  • 12
  • 14
  • 16
计算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;
编辑于 2015-08-24 09:33:21 回复(6)
int main(){
int n=30;
int count=0;
while(n){
	count+=n/3;
	n/=3;
}
printf("%d\n",count);
return 0;	
}

发表于 2015-08-07 22:19:48 回复(0)
对于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个
发表于 2015-04-13 16:02:03 回复(5)
N! == 2X* 3Y * 5Z……,三进制的数中,只有遇到数字3,当前位才转换为0。因此该问题转化为计算Y的值。Y = [N/3] +[N/32] +[N/33] + ...+[N/3K],其中3K  为大于N的最小数。

发表于 2015-05-12 16:17:20 回复(0)
N=30;
N/3+N/9+N/27=14
发表于 2015-04-10 14:28:59 回复(8)
选择E:
首先回顾一下,以前考察过求10进制阶乘结果末尾有多少个0的问题,解法就是判断要阶乘的数中,分解因数出现多少个5,因为2*5=10会出现0。也就是达到了这种进制进位的要求。所以这个题就是变了一个问法,只要达到3进制的进位要求就好,而3进制的进位要求就是满3进1,。所以也就是将问题转换为求相乘的数的因子有3的个数。所以也就是在3,6,9,12,15,18,21,24,27,30分解因数,数3的个数。即:1+1+2+1+1+2+1+1+3+1 = 14。
发表于 2015-07-14 10:41:54 回复(1)
3   10
6    20
9    100
12   110
15   120
18   200
21 210
24 220
27 1000
30 1010   数末尾0的个数就可
发表于 2015-05-26 21:37:50 回复(1)
   X进制的数末尾有k个零就是说该数能表示成m*10^k,m是不为零的一个数,大家可以理解一下,比如十进制1200=(12)*10,八进制1200=(12)*8*8,二进制1200=(12)*2*2,所以三进制有k个零就意味着这个数能表示成,m*3^k,也就是求30!因式分解有多少个3相乘,即30,27,24,21,18,15,12,9,6,3一共1+3+1+1+2+1+1+2+1+1=14个
发表于 2015-05-19 09:08:44 回复(1)
n/3+n/32+n/33=30/3+30/9+30/27=10+3+1=14

发表于 2015-07-14 15:27:18 回复(0)
Bib头像 Bib
30/3=10, 10/3=3, 3/3=1, 10+3+1
发表于 2018-07-31 22:50:14 回复(0)
发表于 2017-08-22 10:07:22 回复(0)
参考10进制,算10进制的一串数字乘积末尾能有多少个0,就是这一串数字互相搭配能形成多少个10 3进制就是这一串数字能形成多少个3,而3是质数,不能继续拆解 也就是寻找这一串数里面能提供多少个3
编辑于 2024-03-01 17:30:21 回复(0)
30用3进制表示刚好是1010,3进制相乘和十进制一样,又不会出现5,所以可以得到末尾的0的乘数就只有:1010 ,1000 ,220 ,210 ,200 ,120 ,110 ,100 ,20 ,10 ,一数~诶~14个,嘿嘿~
发表于 2016-08-16 17:23:16 回复(0)
终于是抓住了这类问题的本质……
发表于 2016-02-25 09:44:44 回复(0)
进制为k,满k才低位添零,高位进位,所以就是对N因式分解。m=floor(N/k1 )+N/k2 +...+N/kx (kx <=N)。如4!=24,化为二进制是11000,0的个数m=4/2+4/4=3。
发表于 2015-06-25 20:14:13 回复(0)
3的倍数有 3.6.9.12.15.18.21,24,27,30,分别为3的指数 1,1,3,1,1,2,1,3,1相加起来等于14,就是结果了。
发表于 2022-03-13 20:44:15 回复(0)
求2的时候,2贡献一个0,4贡献2个0,8贡献3个0。求3,3贡献一个0,9贡献2个零,...。一共贡
发表于 2022-03-01 15:46:56 回复(0)
10!(10的阶乘)=362800
=2×3^13+2×3^11+1×3^10+1×3^9+1×3^8+2×3^5+2×3^3+2×3^2+2×3^1+1×3^0
=(20211100202221)3
你们说的那个3的倍数然后再进位我没有看懂,10!换算成3进制的末尾没有0是1。所以大佬们可以给个答案吗?算到哭泣。
13!(13的阶乘)=6227020800
14×15×16×17×18×19×20×21=8204716800
22×23×24×25×26×27=213127200
28×29×30=24360
后面网上找的答案30!(30的阶乘)=26525285981219058636308480000000(共33位)
大概3的34次方是17位数,然后是3的34次方×3的33次方,大概是67位。我的说法有问题,麻烦大家给个答案。谢谢
发表于 2021-01-22 17:54:22 回复(0)
任何进制的数相乘时,都会末尾 0 积累,如 10 * 200 积累 3 个 0。30!求 3 进制的 0 积累。那么三进制下, 3 的倍数末尾一定为 0,9 的倍数末尾有两个 0,27 的倍数末尾有 3 个 0,... ,依此类推,所以,30 以内 3 的倍数有 10 个,9 的倍数有 3 个,27 的倍数有 1 个,1*3 + (3-1)*2 + (10-3)*1 = 14
发表于 2020-06-13 22:35:31 回复(0)
规律:每剩上一个三就左移一位,末尾补零
发表于 2019-08-25 18:41:05 回复(0)