东华大学2020考研计算机OJ题目解答分享——进阶篇(23)

23 阶乘最后的非0位

作者: XXX时间限制: 1S章节: 循环

问题描述 :

N的阶乘写作N!表示小于等于N的所有正整数的乘积。阶乘会很快的变大,如13!就必须用32位整数类型来存储,70!即使用浮点数也存不下了。你的任务是找到阶乘最后面的非零位。举个例子,5!=12345=120所以5!的最后面的非零位是2,7!=1234567=5040,所以最后面的非零位是4。

输入说明 :

一个不大于1000的整数N。

输出说明 :

共一行,输出N!最后面的非零位。

输入范例 :

7

输出范例 :

4

解答思路:

由于只需要找到最后一个非零位。所以累乘过程中要控制长度,实际上末尾0对找最后一个非零位没有任何影响,所以不断去除尾部0.同时高位非零也对找末尾非零没有太大影响。所以把积控制在一个合理的长度就好了。

AC代码

#include <stdio.h>
#include <string.h>
#include <math.h>

int main()
{
	int n;
	scanf("%d",&n);
	int product=1;
	for(int i=1;i<=n;i++)
	{
		product*=i;

		while(product%10==0)
		{
			product/=10;
		}

		if(product>pow(10,5))
		{
			product=product%1000;
		}
	}

	printf("%d",product%10);



}
发布了61 篇原创文章 · 获赞 5 · 访问量 2448

猜你喜欢

转载自blog.csdn.net/qq_38344326/article/details/104642566