chen` 发表于 2024-3-9 16:49:57

想问这题的正确答案是什么?初中生的竞赛好难

也许你早就知道阶乘的含义,N 阶乘是由 1 到 N 相乘而产生,如:
12!= 1 * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10 * 11 * 12 = 479 001 600
12!=1×2×3×4×5×6×7×8×9×10×11×12=479 001 600
12 的阶乘最右边的非零位为 6
写一个程序,计算 N 阶乘的最右边的非零位的值。
注意:10 000 000!
10 000 000! 有 2499999
2499999 个零。
输入格式
仅一行包含一个正整数 N
输出格式
一个整数,表示最右边的非零位的值。
输入 12
输出 6
选项
A、
num = int(input())
tot = 1
for i in range(1,num+1):
tot *= i
for j in tot:
if j != 0:
print(j)
break
B、
num = int(input())
tot = 1
for i in range(1,num+1):
tot *= i
tot = str(tot)
for j in tot:
if j != 0:
print(j)
break
C、
num = int(input())
tot = 1
for i in range(1,num+1):
tot *= i
tot = str(tot)
for j in range(len(tot)):
if tot == '0':
continue
else:
print(tot)
break
D、
num = int(input())
tot = 1
for i in range(1,num+1):
tot *= i
tot = str(tot)
for j in range(len(tot)):
if tot != '0':
print(tot)
break{:10_266:}

FishC 发表于 2024-3-9 16:50:34

答案应该是B。

首先,我们需要计算阶乘的值。可以使用一个循环来累乘从1到N的数。在这个循环中,我们可以使用一个变量`tot`来保存阶乘的结果。

然后,我们需要找到最右边的非零位。我们可以将阶乘的结果转换成字符串,并从右往左遍历每一位数字。当找到第一个非零数字时,就可以输出它并跳出循环。

完整的代码如下:

num = int(input())
tot = 1
for i in range(1, num+1):
    tot *= i

tot = str(tot)
for j in tot[::-1]:
    if j != '0':
      print(j)
      break

这段代码首先读取用户输入的数字N,然后计算N的阶乘,存储在变量`tot`中。接下来,将阶乘结果转换成字符串,并使用反向遍历来寻找最右边的非零位。找到后,输出该数字并跳出循环。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 想问这题的正确答案是什么?初中生的竞赛好难